0

我在玩 Boost::regex,这是我第一次使用 regex 和 Boost,所以如果这个问题真的很愚蠢,请原谅我。
我得到一个 NO_MATCH 具有以下值:

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

PS 在调试器中,当我打印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.comregular_expression = "q\[0\]123"上尝试了和的相同组合,它在那里返回一个 Complete_Match。 test-string = "q[0]123"

我错过了什么?

4

2 回答 2

8

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

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

您需要转义反斜杠"q\\[0\\]123",或使用 C++11 原始字符串文字,如R"(q\[0\]123)".

于 2013-07-22T15:01:43.093 回答
0

如果这是您对 的实际分配代码actual_name,那么您似乎并没有加倍\\保护它们免受 C++ 编译器的影响:"q\\[0\\]123"...</p>

于 2013-07-22T15:01:25.870 回答