正则表达式为双倍

时间:2012-05-09 13:18:43

标签: regex c++-cli

我有这个正则表达式"^[0-9]+\.?[0-9]*$")来匹配visual c ++中的双数或整数,但它似乎不起作用。有任何想法吗。这就是我应用代码的方式:

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

5 个答案:

答案 0 :(得分:11)

每个人说的正则表达式没有任何问题,这是你的逃避错误。您需要双重转义\字符,因为它也是C ++字符串转义字符。

另外还有一个边缘情况,这个正则表达式会认为1.是一个有效的浮动指针号。所以你可能会更好地使用/^[0-9]+(\\.[0-9]+)?$来消除这种可能性。

答案 1 :(得分:4)

上面的正则表达式并不完美,因为它接受的“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])?” 相反,因为一个数字不能有拖尾零。实际上,源字符串可能是用固定的数字创建的,例如:

printf("%.1f", x);

所以它可能很容易以零字符结束。当然,这些都是定点表示,而不是双打本身。双号可以 也写成-1.23e-4而不是-0.000123。

答案 2 :(得分:0)

也许不是直接的答案,只是有用的信息。正则表达式:

std::regex rx(R"(^([+-]?(?:[[:d:]]+\.?|[[:d:]]*\.[[:d:]]+))(?:[Ee][+-]?[[:d:]]+)?$)");

匹配字符串:

"1", "0", "10",
"1000.1", "+1",
"+10", "-10", "1.",
".1", "1.1", "+1.",
"-1.", "+.1", "-.1",
"009", "+009", "-009",
"-01e0", "+01E0", "+1e-1",
"+1e+1", "+1.e1", "1E1",
"1E+1", "0.001e-12", "0.111111111111111"

,并且与以下字符串不匹配:

".", "1a", "++1",
"+-1", "+", "-.",
"-", "--1.", "1.e.1",
"1e.1", "0+.e0"

第一个值看起来像C ++中double类型的有效值,例如double test = +009.e+10可以。

在ideone.com中播放:https://ideone.com/ooF8sG

答案 3 :(得分:0)

(\d+)?\.(\d+)?

上面的正则表达式适用于诸如“ 45.5” “ 12。” “。12”

答案 4 :(得分:-1)

/ ^ [0-9] +。[0-9] + $ :将其用于双打。

接受123.123类型。