時,STL正則表達式類崩潰我正在編寫一個小型C++程序來搜索和替換大量文件中的字符串;例如,要搜索:VS2013:當正則表達式包含
0x6e }
這是我的正則表達式:
regex regex1("0x[a-fA-F0-9]{1,2}\s\}");
和崩潰在上面的行。
正則表達式在使用Notepad ++時起作用。
請告知如何處理}
?
時,STL正則表達式類崩潰我正在編寫一個小型C++程序來搜索和替換大量文件中的字符串;例如,要搜索:VS2013:當正則表達式包含
0x6e }
這是我的正則表達式:
regex regex1("0x[a-fA-F0-9]{1,2}\s\}");
和崩潰在上面的行。
正則表達式在使用Notepad ++時起作用。
請告知如何處理}
?
逃離\
正則表達式更改爲下面就讓它開始工作;
regex regex1("0x[a-fA-F0-9]{1,2}\\s\\}");
// ^^ additional escaping
相同的字符,\
,被用作在C轉義字符++和正則表達式。單個的\
啓動C++字符轉義(編譯器至少應該對無效的字符進行警告)。雙\\
將被解析爲regex
它需要的轉義字符。
原始字符串文字
考慮使用C++ raw string literals,在C++ 11引入(沒有逃脫必需)。像這樣的東西應該可以做到這一點。
regex regex1(R"(0x[a-fA-F0-9]{1,2}\s\})");
C++原始字符串文字是形式;
R 「定界符(raw_character *)定界符」
凡定界符是可選的,並且raw_character*
字符串不能包含所述終止序列)delimiter"
。
您需要記住\
不僅是正則表達式的轉義字符,還是字符串文字的轉義字符。要在正則表達式中生成\
字符作爲轉義字符,而不是字符串,則需要將其轉義:\\
。另外,如果你的編譯器支持C++ 11,您可以使用原始字符串字面量:R"(0x[a-fA-F0-9]{1,2}\s\})"