5

私がsregexこのようなオブジェクトを持っているとしましょう:

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

xpressiveが名前付きグループを適切にサポートしているにもかかわらず、これに関するxpressiveドキュメントで参照を見つけることができませんでした。

グループを反復処理することは問題ありませんが、グループ名にアクセスするにはどうすればよいですか(グループに名前がある場合)。

では、名前付きグループをどのように反復するのでしょうか?

4

1 に答える 1

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

于 2011-12-28T16:39:17.100 に答える