C ++ std :: regex错误地验证整数

时间:2017-07-26 09:18:25

标签: c# c++ regex

我有一个简单的正则表达式来验证用户输入是否为整数。在C#项目中,我看到它正确验证。下面是我在C#中的代码:

string string_to_validate = Console.ReadLine();    
Regex int_regex = new Regex("[0-9]");
if (int_regex.IsMatch(string_to_validate))
    Console.WriteLine("Regex is match. Validation is success!");
else
    Console.WriteLine("Regex is not match. Validation is fail!");

但是在C ++中我看到它正确验证了。它只能正确验证字符串的长度是1.下面是我在C ++中的代码:

std::string string_to_validate;
std::cin >> string_to_validate;
std::regex int_regex("[0-9]");
if (std::regex_match(string_to_validate,
                     int_regex))
  std::cout << "Regex is match. Validation is success!";
else
  std::cout << "Regex is not match. Validation is fail!";

请帮忙。这是C ++问题还是我的问题?

1 个答案:

答案 0 :(得分:0)

根据MSDN,C#方法bool Regex.IsMatch(String)

  

指示是否在Regex中指定正则表达式   构造函数在指定的输入字符串中查找匹配项。

如果输入字符串中至少有一个数字,它将返回true

C ++ std::regex_match

  

确定正则表达式是否与整个目标匹配   字符序列

因此整个输入字符串必须包含要传递正则表达式的数字。

要在C ++中验证具有任意长度的整数的字符串,您必须使用此正则表达式:

 std::regex int_regex("[0-9]+"); // '+' - quantifier '1 or more' items from range [0-9] 

 std::regex int_regex("\\d+");