我正在编写一个小的 C++ 程序来搜索和替换大量文件中的字符串;例如,搜索:
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"delimiter(raw_character*)delimiter"
其中 delimiter 是可选的,raw_character*
字符串不得包含终止序列 )delimiter"
。
关于c++ - VS2013 : STL regex class crashes when regular expression contains\,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26405743/