2012-05-09 10 views
7

私はこの正規表現"^[0-9]+\.?[0-9]*$")をVisual C++の倍数または整数に一致させるが、うまくいかないようだ。何か案は。言うあたりの正規表現と間違って何もない二重の正規表現

if (System::Text::RegularExpressions::Regex::IsMatch(e0, "^[0-9]+\.?[0-9]*$")) 
      { 
       e0_val = System::Convert::ToDouble(e0); 
      } 
+2

なぜ機能しないと思いますか?例を挙げる。 –

+0

@AndrewLogvinov +1、「gimme teh codezは動作しません」というのは良い質問形式ではありません。 –

+0

おそらく始まりか終わりの空白?あなたはそれを使用しているコードを投稿できますか? –

答えて

9

、それはあなたがそれが故障していエスケープです:これは私がコードを適用しています方法です。 \文字はC++文字列のエスケープ文字なので、二重にエスケープする必要があります。

さらに、この正規表現では1.が有効な浮動小数点数であると思われるエッジケースがあります。したがって、その可能性を排除する/^[0-9]+(\\.[0-9]+)?$をお勧めします。

2

上記正規表現は、有効な数字ではない「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と書くこともできます。

関連する問題