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