Я использую библиотеку re2 для поиска совпадений регулярных выражений в тексте. Я вижу, что есть разница в поведении между Match()/PartialMatch()/FindAndConsume()
- только в следующем коде Match()
возвращает true и заполняет строку подстроки.
Если я изменяю регулярное выражение на группу захвата, то есть (\\d+)
вместо \\d+
, тогда все три функции завершаются успешно и заполняют субматч.
Я не смог найти документацию по этому поведению в заголовках re2. Может кто-нибудь объяснить, почему PartialMatch()/FindAndConsume()
требуется группа захвата и почему Match()
нет?
std::string text = "b123";
re2::StringPiece sp(text);
RE2 regex("\\d+");
re2::StringPiece submatch;
bool ret = regex.Match(sp, 0, text.size(), RE2::UNANCHORED, &submatch, 1); //returns true and fills submatch
ret = RE2::PartialMatch(sp, regex, &submatch); //fails
while (RE2::FindAndConsume(&sp, regex, &submatch)) { //fails
std::cout << submatch << std::endl;
}