我一直坚持这个奇怪的标准:wregex行为:
^(?:(?:[^\\u0000-\\u001f<>:\\\\\"/\\\\\\|\\?\\*]*\\w+[^\\u0000-\\u001f<>:\\\\\"/\\\\\\|\\?\\*]*:/)|(?:\\./))(?:(?:[^\\u0000-\\u001f<>:\\\\\"/\\\\\\|\\?\\*]*\\w+[^\\u0000-\\u001f<>:\\\\\"/\\\\\\|\\?\\*]*/?)|(?:\\./)|(?:\\.\\./))*$
使用
引发异常e.code() == regex_constants::error_brack
奇怪的是,我一直在使用在线ECMAScript正则表达式验证器进行测试,没有任何麻烦。事实上,删除第一对括号如下。
^(?:(?:\\w+[^\\u0000-\\u001f<>:\\\\\"/\\\\\\|\\?\\*]*:/)|(?:\\./))(?:(?:[^\\u0000-\\u001f<>:\\\\\"/\\\\\\|\\?\\*]*\\w+[^\\u0000-\\u001f<>:\\\\\"/\\\\\\|\\?\\*]*/?)|(?:\\./)|(?:\\.\\./))*$
实际上解决了这个问题,没有特别考虑括号不匹配。
有人对这种行为有解释吗?
编辑:
似乎即使L“[^ \ u0000- \ u001f]”也不起作用。
编辑:
我在编译和执行时运行了一个示例,没有注意到它使用了GCC。此外,事实上MVSC似乎是在GCC给我一个运行时错误(例外)时。
答案 0 :(得分:1)
我知道这个帖子真的很老,但有人可能会从答案中受益。
问题是正则表达式字符串null
中的\u0000
,编译器将其解释为字符串的结尾。
正则表达式字符串应声明为raw,例如R"(some regex string)"
。
这将解决正则表达式中的任何null
问题。