2010-03-12 68 views
3

我正在使用新版本的boost 1.42,我想使用正则表达式和命名子组。下面是一个例子。获取名称子组

std::string line("match this here FIELD=VALUE in the middle"); 
boost::regex rgx("FIELD=(?<VAL>\\w+)", boost::regex::perl); 
boost::smatch thisMatch; 
boost::regex_search(line, thisMatch, rgx); 

你知道如何获取比赛内容吗? 传统的方式是

std::string result(mtch[1].first, mtch[1].second); 

我不想用这种方式。

我想像往常一样在Perl和正则表达式中使用子组的名称。 我试过了,但没有奏效。

std::string result(mtch["VAL"].first, mtch["VAL"].second); 

您知道如何使用子组的名称获取值吗?

感谢 AFG

+0

你想要的方式和你不想要的方式有什么区别?这些陈述完全相同。 – kennytm 2010-03-12 12:59:21

+0

你说得对。我刚刚更改了示例中的代码 – 2010-03-12 15:59:24

+0

再次!看看下面'因为我找到了我需要的东西! 周末愉快! – 2010-03-12 16:21:06

回答

1

据我所知,没有这样的选项。请参阅Understanding Marked Sub-Expressions and Captures,特别是Perl和Boost.Regex等价的表。您需要使用boost::match_results<IteratorType>才能访问任何和所有匹配项。

+0

嗨,dirkgently!我感谢你的网址。我找到了解决方案,请参阅下面我写的内容! 周末愉快! – 2010-03-12 16:20:06

1

我终于找到了自己想达到的目标。

std::cout << mtch["VAL"] << std::endl; 

我试过了,它会工作没有任何问题。

我认为这是一个功能只有从版本1.42升压,但我不知道。