2014-10-16 194 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\})"