3

私はブースト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

4

2 に答える 2

1

私の知る限り、そのようなオプションはありません。マークされた部分式とキャプチャの理解、特に Perl と Boost.Regex の同等性に関する表を参照してください。boost::match_results<IteratorType>すべての一致にアクセスするには、 を使用する必要があります。

于 2010-03-12T12:56:12.103 に答える
1

私はついに私が達成したいことを見つけました。

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

試してみましたが、問題なく動作します。

これは、boost のバージョン 1.42 以降でのみ利用できる機能だと思いますが、よくわかりません。

于 2010-03-12T16:11:16.947 に答える