boost regex_search не может найти первое совпадение

boost::regex re("(abc)(.*?)");
boost::smatch m;
std::string str = "abcdlogin";
boost::regex_search(str, m, re);

Я нашел m [1] .first это «abcdlogin», m [1] .second это «dlogin».

Но я думаю, что m [1] .first должен быть «abc»?

1

Решение

Как отмечено в документация:

м [п] .first: Для всех целых чисел n < m.size (), начало последовательности
что соответствует подвыражению п. В качестве альтернативы, если подвыражение n сделал
не участвуй в матче, значит последний.

м [п] .second: Для всех целых чисел n < m.size (), конец последовательности
что соответствует подвыражению п. В качестве альтернативы, если подвыражение n сделал
не участвуй в матче, значит последний.

Обратите внимание, как они итераторы в соответствующее подвыражение.
В вашем примере, если вы хотите строку с "abc", вы можете построить строку следующим образом: std::string s(m[1].first, m[1].second);,

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]