Boost 正则表达式:获取命名组

Posted

技术标签:

【中文标题】Boost 正则表达式:获取命名组【英文标题】:Boost Regular Expression: Getting the Named Group 【发布时间】:2015-12-20 16:27:50 【问题描述】:

如何使用 Boost 正则表达式获取模式匹配对应的组名?

下面会将匹配的表达式输出到给定的模式。但是如何获取对应的命名组呢?

boost::regex pattern("(?<alpha>[0-9]*\\.?[0-9]+)|(?<beta>[a-zA-Z_]+)");

string s = "67.2 x  7 I am";

string::const_iterator start = s.begin();
string::const_iterator end   = s.end();
boost::sregex_token_iterator i(start, end, pattern);
boost::sregex_token_iterator j;

for ( ;i != j; ++i)

    cout << *i << endl;
        // '67.2' and '7' belongs to "alpha"
        // 'x', 'I', 'am' belongs to "beta"

【问题讨论】:

【参考方案1】:

You can get it from match_result 它适用于 xpressive,但同样适用于 Boost.Regex

【讨论】:

为什么要链接到不同库的文档? @sehe 1) 我把两者都链接了。 2) 我不太确定 OP 实际使用的是什么。 2) boost::regex - 我敢肯定这是非常确定的 @sln 奇怪,我链接的 Boost.regex 的文档说“接受字符串的重载,返回对 sub_match 对象的引用,该对象表示与命名的子表达式 n 匹配的字符序列。” @RevolverOcelot - 确实,你是对的。我刚刚用boost::regex 试过这个,match["name"].str() 确实有效。我想很久以前我希望得到 name 给定一个组 number 和签证/反之亦然。非常感谢。这就是我在 SO 阅读琐事的原因。顺便说一句,知道如何在替换端的regex_replace() 中使用 named 组(而不是通过回调)。我只是在谈论常规的正则表达式,而不是富有表现力的。谢谢! +1

以上是关于Boost 正则表达式:获取命名组的主要内容,如果未能解决你的问题,请参考以下文章

使用 Boost::regex 进行正则表达式组匹配

Python:使用JSON API链接通过正则表达式显示命名捕获组

正则表达式搜索匹配不使用组

正则表达式 - 仅当另一个命名组匹配时命名组

正则表达式之基础

正则表达式中的命名捕获组