Используйте 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;
}