获得名称子组

时间:2010-03-12 10:45:48

标签: c++ regex boost boost-regex

我正在使用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和regex中使用子组的名称。 我尝试了这个,但它没有用。

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

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

由于 AFG

2 个答案:

答案 0 :(得分:1)

AFAIK,没有这样的选择。请参阅Understanding Marked Sub-Expressions and Captures,特别是关于Perl和Boost.Regex等效的表。您需要使用boost::match_results<IteratorType>来访问任何和所有匹配项。

答案 1 :(得分:1)

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

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

我试过了,它会毫无问题地工作。

我认为这是一个功能,仅在版本1.42版本提供,但我不确定。