2014-10-16 122 views
2

時,STL正則表達式類崩潰我正在編寫一個小型C++程序來搜索和替換大量文件中的字符串;例如,要搜索:VS2013:當正則表達式包含

0x6e } 

這是我的正則表達式:

regex regex1("0x[a-fA-F0-9]{1,2}\s\}"); 

和崩潰在上面的行。

正則表達式在使用Notepad ++時起作用。

請告知如何處理}

回答

5

逃離\

正則表達式更改爲下面就讓它開始工作;

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"

4

您需要記住\不僅是正則表達式的轉義字符,還是字符串文字的轉義字符。要在正則表達式中生成\字符作爲轉義字符,而不是字符串,則需要將其轉義:\\。另外,如果你的編譯器支持C++ 11,您可以使用原始字符串字面量:R"(0x[a-fA-F0-9]{1,2}\s\})"