Я играл с Boost :: regex, и это первый раз, когда я работаю с regex, а также с Boost, так что простите, если вопрос действительно глупый.
Я получаю NO_MATCH со следующими значениями:
actual_name = "q\[0\]123"user_name = "q[0]123"
Постскриптум В отладчике, когда я напечатал 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
}
Я попробовал ту же комбинацию regular_expression = "q\[0\]123"
а также test-string = "q[0]123"
на Rubular.com и он возвращает Complete_Match там.
Что мне не хватает?
"q\[0\]123"
компилирует?
\[
не является символом обратной косой черты, за которым следует символ открывающей квадратной скобки. Это побег последовательность. Я не помню, чтобы это была допустимая escape-последовательность, но это может быть расширение в вашем компиляторе.
Вы должны избежать обратной косой черты, как "q\\[0\\]123"
или используйте строковый литерал C ++ 11, например R"(q\[0\]123)"
,
Если это ваш фактический код присвоения actual_name
кажется, ты не удваиваешь \\
чтобы защитить их от компилятора C ++: "q\\[0\\]123"
…