[英]Strange std::wregex behavior
我一直堅持這種奇怪的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給我運行時錯誤(例外)的事實。
我知道這個線程確實很舊,但是有人可能會從答案中受益。
問題是正則表達式字符串\
的null
,編譯器會將其解釋為字符串的結尾。
正則表達式字符串應聲明為raw,例如R"(some regex string)"
。 這將解決您的正則表達式中的所有null
問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.