我正在使用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
答案 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版本提供,但我不确定。