如何在xpressive中迭代命名组?

时间:2011-12-23 00:29:56

标签: c++ regex boost boost-xpressive

说我有一个sregex这样的对象:

boost::xpressive::sregex::compile("(?P<firstword>\\w+) (?<secondword>\\w+)!");

我无法在xpressive文档中找到任何关于此的参考,尽管xpressive支持命名组很好。

我知道可以通过群组进行迭代很好,但是如何访问群组名称(如果群组中有名称)?

那么,我将如何遍历命名组?

1 个答案:

答案 0 :(得分:4)

假设我们有正在处理的整个正则表达式, 我认为你正在尝试创建一个匹配两者的正则表达式 命名捕获,因此尝试迭代命名捕获是没用的。

你只需要尝试类似的东西。

std::string str("foo bar");
sregex rx = sregex::compile("(?P<firstword>\\w+) (?<secondword>\\w+)!");
smatch what;
if(regex_search(str, what, rx))
{
    std::cout << "char = " << what["firstword"]  << what["secondword"] std::endl;
}

如果正则表达式是更复杂模式的一部分,为什么不使用静态命名捕获: http://www.boost.org/doc/libs/1_41_0/doc/html/xpressive/user_s_guide.html#boost_xpressive.user_s_guide.named_captures.static_named_captures