4

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

例子:

表达式: xx.*?yy

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

                 - xx.*?yy

表达式: xx。?yy | 二十。?Z Z

预期结果: 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
4

1 回答 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';
  }
}

这将提取标记的 subexpression (xx.*?zz|aa.*?bb),但要获得更精确的信息,您需要一个正则表达式解析器:轻量级正则表达式解析器

于 2012-11-01T11:09:03.407 回答