如何在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
答案 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。