我正在玩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。
我错过了什么?
答案 0 :(得分:8)
"q\[0\]123"
编译?
\[
不是反斜杠字符,后跟一个开头的方括号字符。这是一个逃脱序列。我不记得它是一个有效的转义序列,但它可能是编译器的扩展。
您需要转义"q\\[0\\]123"
之类的反斜杠,或使用像R"(q\[0\]123)"
这样的C ++ 11原始字符串文字。
答案 1 :(得分:0)
如果那是你actual_name
的实际作业代码,那么你似乎没有加倍\\
来保护他们免受C ++编译器的攻击:"q\\[0\\]123"
......