首页 > 解决方案 > 如何使用 re2 获取部分匹配的数量

问题描述

我想使用 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 因为字符串中有三个标点符号;

标签: c++re2

解决方案


使用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;
}

推荐阅读