我正尝试使用Google的RE2库快速匹配许多(500多个)正则表达式,因为我想获得与this whitepaper类似的结果。我想在第13页上使用RE2-m。
从我在网上看到的内容来看,Set接口是必经之路,尽管我不确定从哪里开始-我无法在线使用set界面找到Google RE2教程。有人可以指出正确的方向吗?
答案 0 :(得分:0)
今天就为我正在处理的事情实现了这一点,下面是供将来读者使用的摘要。
使用RE2
处理此问题的正确类是RE2::Set
,您可以找到代码here。
这里是一个例子:
std::vector<std::string> kRegexExpressions = {
R"My name is [\w]+",
R"His number is [\d]+",
};
RE2::Set regex_set(RE2::DefaultOptions, RE2::UNANCHORED);
for (const auto &exp : kRegexExpressions) {
int index = regex_set.Add(exp, &err);
if (index < 0) {
<report-error>
return;
}
}
if (!regex_set.Compile()) {
<report-error>
return;
}
std::vector<int> matching_rules;
if (!regex_set_.Match(line, &matching_rules)) {
<no-match>
return;
}
for (auto rule_index : matching_rules) {
std::cout << "MATCH: Rule #" << rule_index << ": " << kRegexExpressions << std::endl;
}