时,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\})"