use*_*452 2 c++ regex stl c++11 visual-studio-2013
我正在编写一个小的C++程序来搜索和替换许多文件中的字符串; 例如,搜索:
0x6e }
Run Code Online (Sandbox Code Playgroud)
这是我的正则表达式:
regex regex1("0x[a-fA-F0-9]{1,2}\s\}");
Run Code Online (Sandbox Code Playgroud)
它在上面的线上崩溃了.
使用Notepad ++时,正则表达式有效.
请告知如何处理}?
逃离 \
将正则表达式更改为以下内容将使其正常工作;
regex regex1("0x[a-fA-F0-9]{1,2}\\s\\}");
// ^ ^ additional escaping
Run Code Online (Sandbox Code Playgroud)
相同的字符\用作C++和正则表达式中的转义字符.单个\启动C++字符转义(编译器应该至少警告无效的转义).\\将解析double 以提供regex它所需的转义字符.
原始字符串文字
考虑使用C++ 11中引入的C++ 原始字符串文字(不需要转义).这样的事情应该可以解决问题;
regex regex1(R"(0x[a-fA-F0-9]{1,2}\s\})");
Run Code Online (Sandbox Code Playgroud)
C++原始字符串文字的形式;
R" 分隔符(raw_character*)分隔符 "
当分隔符是可选的,raw_character*字符串不能包含终止序列)delimiter".