使用 Google RE2 同时匹配多个正则表达式

Enn*_*our 5 c++ re2

我尝试使用 Google 的 RE2 库快速匹配许多(500 多个)正则表达式,因为我希望获得与本白皮书类似的结果。我想使用第 13 页的 RE2-m。

从我在网上看到的情况来看,Set 接口是可行的方法,尽管我不确定从哪里开始——我还没有找到在线使用 set 接口的 Google RE2 教程。有人可以指出我正确的方向吗?

Dan*_*man 4

今天刚刚为我正在做的事情实现了这一点,这里有一个片段供未来的读者使用。

处理此问题的正确类RE2是,您可以在此处RE2::Set找到代码。

这是一个例子:

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;
}
Run Code Online (Sandbox Code Playgroud)