re2 - различное поведение между Match / PartialMatch / FindAndConsume - PullRequest
0 голосов
/ 19 апреля 2020

Я использую библиотеку 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;
    }
...