我试着按照这里的例子:
http://www.boost.org/doc/libs/1_31_0/libs/regex/doc/syntax.html
我想匹配此表单的行:
[ foo77 ]
这应该很简单,我尝试了这样的代码片段:
boost::regex rx("^\[ (.+) \]");
boost::cmatch what;
if (boost::regex_match(line.c_str(), what, rx)) std::cout << line << std::endl;
但我不匹配那些线。我尝试了以下变体表达式:
"^\[[:space:]+(.+)[:space:]+\]$" //matches nothing
"^\[[:space:]+(.+)[:space:]+\]$" //matches other lines but not the ones I want.
我做错了什么?
答案 0 :(得分:1)
将boost::regex rx("^\[ (.+) \]");
更改为boost::regex rx("^\\[ (.+) \\]");
,它会正常工作,编译器应警告无法识别的字符转义序列。
答案 1 :(得分:0)
您需要转义正则表达式中的\
,否则编译器会将"\["
视为(无效的)转义序列。
boost::regex rx("^\\[ (.+) \\]");
更好的解决方案是使用raw string literals。
boost::regex rx(R"(^\[ (.+) \])");