我正在尝试以格式
进行一段时间的输入验证"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";
它永远不会奏效。知道我可能做错了吗?
答案 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而不消费。
演示: