使用Boost :: regex的奇怪结果

时间:2013-07-22 14:54:41

标签: c++ regex boost boost-regex

我正在玩Boost :: regex,这是我第一次使用正则表达式和Boost,所以请原谅我,如果问题真的很愚蠢。
我收到的NO_MATCH值如下:

actual_name = "q\[0\]123"
user_name   = "q[0]123"

P.S。在调试器中,当我打印actual_name时显示 - q\\[0\\]123。但是,当我执行actual_name.size()时,结果是9.

这是我的代码:

boost::regex regexpr( actual_name );
boost::match_results<pstring::const_iterator> what;
boost::regex_match(user_name, what, regexpr);

if(what[0].matched)
{
     // Match found
}
else
{
    // NO_match found
}

我在Rubular.com上尝试了regular_expression = "q\[0\]123"test-string = "q[0]123"的相同组合,并在那里返回了一个Complete_Match。

我错过了什么?

2 个答案:

答案 0 :(得分:8)

"q\[0\]123"编译?

\[不是反斜杠字符,后跟一个开头的方括号字符。这是一个逃脱序列。我不记得它是一个有效的转义序列,但它可能是编译器的扩展。

您需要转义"q\\[0\\]123"之类的反斜杠,或使用像R"(q\[0\]123)"这样的C ++ 11原始字符串文字。

答案 1 :(得分:0)

如果那是你actual_name的实际作业代码,那么你似乎没有加倍\\来保护他们免受C ++编译器的攻击:"q\\[0\\]123" ......