簡體   English   中英

奇怪的std :: wregex行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM