【问题标题】:Get sub expression from boost::regex (before Match)从 boost::regex 获取子表达式(在匹配之前)
【发布时间】:2012-11-01 08:21:46
【问题描述】:

如何获取 boost::regex(basic_regex<char, regex_traits<char> >)object 中的子表达式。 (没有要比较的文本-在完成之前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

【问题讨论】:

    标签: c++ regex boost


    【解决方案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),但要获得更精确的信息,您需要一个正则表达式解析器:Lightweight regex parser

    【讨论】:

    • 我的意思是问如何得到表达式除以“或”
    • @user1790461 是的,你需要一个正则表达式解析器;这不是正则表达式实现所提供的。
    猜你喜欢
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    相关资源
    最近更新 更多