1

我一直坚持这种奇怪的 std: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 给我一个运行时错误(异常)的事实。

4

1 回答 1

1

我知道这个线程真的很老但是有人可能会从答案中受益。

问题在于null正则表达式 string\u0000中的 ,编译器会将其解释为字符串的结尾。

正则表达式字符串应声明为原始字符串,例如R"(some regex string)". 这将解决null您的正则表达式中的任何问题。

于 2017-12-21T22:56:20.820 回答