提升正则表达不匹配?

时间:2014-02-13 14:06:29

标签: c++ regex boost

我试着按照这里的例子:

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.

我做错了什么?

2 个答案:

答案 0 :(得分:1)

boost::regex rx("^\[ (.+) \]");更改为boost::regex rx("^\\[ (.+) \\]");,它会正常工作,编译器应警告无法识别的字符转义序列。

答案 1 :(得分:0)

您需要转义正则表达式中的\,否则编译器会将"\["视为(无效的)转义序列。

boost::regex rx("^\\[ (.+) \\]");

更好的解决方案是使用raw string literals

boost::regex rx(R"(^\[ (.+) \])");