复杂的regex_match无法在C ++中运行

时间:2017-02-04 05:23:19

标签: c++ regex

我正在尝试以格式

进行一段时间的输入验证
"1:00 to 12:59 and AM/PM"

我创建了这个正则表达式:\b((1[0-2]|0?[1-9]):([0-5][0-9]) *([AaPp][Mm]))。 我在regexr.com上进行了测试,结果很好。

然而,当我尝试做类似的事情时:

std::string s ("1:00 AM");
std::regex e ("\b((1[0-2]|0?[1-9]):([0-5][0-9]) *([AaPp][Mm]))");

if (std::regex_match (s,e))
  std::cout << "string object matched\n";

它永远不会奏效。知道我可能做错了吗?

2 个答案:

答案 0 :(得分:2)

感谢@MYGz,我能解决这个问题。也许它与逃脱角色有关。

我所做的就是改变@ MYGz的建议是删除\ s。

它适用于([0-1]?[0-2]:[0-5][0-9] *[AaPp][Mm])

答案 1 :(得分:2)

使用原始字符串文字R来使用单个\。您可以尝试这样:

R"(?!0:00|00:00)([0-1]?[0-2]:[0-5]\d\s*[AaPp][Mm])"

(?!0:00|00:00) - 负面展望0:00或00:00而不消费。

演示:

https://regex101.com/r/t7Oa0Q/2