从boost::regex中获取子表达式(匹配前)

4

如何获取boost::regex(basic_regex<char, regex_traits<char> >)对象中的子表达式。(在执行boost::regex_search之前没有文本进行比较)

示例:

表达式: xx.*?yy

期望结果: 1个子表达式-

                 - xx.*?yy

表达式:xx.?yy | xx.?zz

期望结果:2个子表达式-

                - xx.*?yy

                - xx.*?zz

表达式:xx.?yy|(xx.?zz|aa.*?bb)

预期结果:2个子表达式-

                -  xx.*?yy       

                - (xx.*?zz|aa.*?bb) -2 sub expression-
 
                       -  xx.*?zz

                       -  aa.*?bb
1个回答

1

boost::regex 可以让你提取标记(即括号内的)子表达式:

#include <boost/regex.hpp>
#include <iostream>

int main() {
  boost::regex r("xx.?yy|(xx.?zz|aa.*?bb)", boost::regex::save_subexpression_location);
  for (unsigned i = 1; i < r.mark_count(); ++i) {
    auto range = r.subexpression(i);
    std::cout << std::string(range.first, std::next(range.second)) << '\n';
  }
}

这将提取标记的子表达式(xx.*?zz|aa.*?bb),但要获得更精确的内容,您需要使用正则表达式解析器:轻量级正则表达式解析器

我想问如何获得由“或”分隔的表达式。 - user1790461
@user1790461 是的,你需要一个正则表达式解析器来实现这个功能;这不是一个正则表达式实现本身所能提供的。 - ecatmur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接