Как получить количество частичных совпадений, используя re2 - PullRequest
2 голосов
/ 02 июня 2019

Я хочу получить количество совпадений подстрок данной строки, используя re2;

Я прочитал коды re2: https://github.com/google/re2/blob/master/re2/re2.h, но не вижу простого способа сделать это.

У меня есть следующий пример кода:

std::string regexPunc = "[\\p{P}]"; // matches any punctuations; 
re2::RE2 re2Punc(regexPunc);
std::string sampleString = "test...test";
if (re2::RE2::PartialMatch(sampleString, re2Punc)) {
    std::cout << re2Punc.numOfMatches();
}

Я хочу, чтобы он вывел 3, так как в строке три пунктуации;

1 Ответ

2 голосов
/ 02 июня 2019

Используйте FindAndConsume и считайте совпадения самостоятельно. Это не будет неэффективно, потому что для того, чтобы узнать количество совпадений, эти совпадения должны быть выполнены и подсчитаны в любом случае.

Пример:

std::string regexPunc = "[\\p{P}]"; // matches any punctuations; 
re2::RE2 re2Punc(regexPunc);
std::string sampleString = "test...test";
StringPiece input(sampleString);
int numberOfMatches = 0;
while(re2::RE2::FindAndConsume(&input, re2Punc)) {
    ++numberOfMatches;
}
...