私はこの正規表現"^[0-9]+\.?[0-9]*$")
をVisual C++の倍数または整数に一致させるが、うまくいかないようだ。何か案は。言うあたりの正規表現と間違って何もない二重の正規表現
if (System::Text::RegularExpressions::Regex::IsMatch(e0, "^[0-9]+\.?[0-9]*$"))
{
e0_val = System::Convert::ToDouble(e0);
}
私はこの正規表現"^[0-9]+\.?[0-9]*$")
をVisual C++の倍数または整数に一致させるが、うまくいかないようだ。何か案は。言うあたりの正規表現と間違って何もない二重の正規表現
if (System::Text::RegularExpressions::Regex::IsMatch(e0, "^[0-9]+\.?[0-9]*$"))
{
e0_val = System::Convert::ToDouble(e0);
}
、それはあなたがそれが故障していエスケープです:これは私がコードを適用しています方法です。 \
文字はC++文字列のエスケープ文字なので、二重にエスケープする必要があります。
さらに、この正規表現では1.
が有効な浮動小数点数であると思われるエッジケースがあります。したがって、その可能性を排除する/^[0-9]+(\\.[0-9]+)?$
をお勧めします。
上記正規表現は、有効な数字ではない「09」を受け入れるので完璧ではありません。より良い表現は次のようになります。
"^(-?)(0|([1-9][0-9]*))(\\.[0-9]+)?$"
:理論的には
1. is an optional negative sign;
2. is zero or a valid non-zero integer;
4. is the optional fracture part;
、骨折部分がように記述しなければならない "(\ [0-9] * [1-9]。)?"数字に0のテールがあってはならないため、 を使用してください。実際には、ソース文字列は、数字例えば固定数で作成された可能性があります:
printf("%.1f", x);
ので、それは簡単にゼロの文字で終わるかもしれません。もちろん、これらはすべて倍精度ではなく固定小数点表現です。二重の数値は、-0.000123の代わりに を-1.23e-4と書くこともできます。
なぜ機能しないと思いますか?例を挙げる。 –
@AndrewLogvinov +1、「gimme teh codezは動作しません」というのは良い質問形式ではありません。 –
おそらく始まりか終わりの空白?あなたはそれを使用しているコードを投稿できますか? –