c++ - VS2013 : STL regex class crashes when regular expression contains\

标签 c++ regex c++11 stl visual-studio-2013

我正在编写一个小的 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/

相关文章:

c++ - 在套接字连接上生成 actor 的 libcppa actor

php - str_ireplace 不适用于非 ASCII 字符

python - 正则表达式:将单词和数字与小数相匹配

c++ - 如何根据 set.begin() 的偏移量迭代 std::set?

c++ - 如何用智能指针构造树结构?

c++ - 使用 STL std::sort 的方式作为 qsort_r

c++ - std::map 中 find() 的时间复杂度?

c++ - 观察者常量正确性

python - 匹配字符直到到达某些字符的正则表达式是什么?

c++ - 将自定义对象添加到 vector 时如何启用 move 语义?