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

时间:2012-11-01 08:21:46

标签: c++ regex boost

如何在boost :: regex (basic_regex<char, regex_traits<char> >)对象中获取子表达式。 (没有要比较的文本{be 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 个答案:

答案 0 :(得分:0)

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),但为了获得更精确的结果,您需要一个正则表达式解析器:Lightweight regex parser