1
我一直被困在這個陌生的STD:wregex行爲:奇怪的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給我一個運行時錯誤(例外)的事實。
這並不是說這會破壞模式,但爲什麼你的角色類包含兩個文字反斜槓? (''''''在'''之前和'/'之後) –
正則表達式是格式化的,因此它適用於c代碼。所以\\\\事實上\\就像普通的正則表達式一樣。第二個是正則表達式的轉義序列 –
我知道四個反斜槓會在模式中產生一個反斜槓,但是在同一個字符類中有兩次反斜槓,用'b'替換反斜槓,這就像編寫'[^ ... <>:b \「/ b \\ | ...]'。 –