VS2013:当正则表达式包含\时,STL正则表达式类崩溃

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 ++时,正则表达式有效.

请告知如何处理}

Nia*_*all 5

逃离 \

将正则表达式更改为以下内容将使其正常工作;

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".