4

(basic_regex<char, regex_traits<char> >)boost::regexオブジェクトでサブ式を取得するにはどうすればよいですか。(比較するテキストなし - 実行前boost::regex_search)

例:

式: xx.*?yy

期待される結果: 1 つのサブ式-

                 - xx.*?yy

表記: ○○。?yy | xx. ?グーグー

期待される結果: 2 つの部分式-

                - xx.*?yy

                - xx.*?zz

表記: ○○。?yy|( xx.?zz|aa.*?bb)

期待される結果: 2 つの部分式-

                -  xx.*?yy       

                - (xx.*?zz|aa.*?bb) -2 sub expression-
 
                       -  xx.*?zz

                       -  aa.*?bb
4

1 に答える 1

1

boost::regexマークされた(つまり、括弧で囲まれた)部分式を抽出できます。

#include <boost/regex.hpp>
#include <iostream>

int main() {
  boost::regex r("xx.?yy|(xx.?zz|aa.*?bb)", boost::regex::save_subexpression_location);
  for (unsigned i = 1; i < r.mark_count(); ++i) {
    auto range = r.subexpression(i);
    std::cout << std::string(range.first, std::next(range.second)) << '\n';
  }
}

これにより、マークされた部分式が抽出され(xx.*?zz|aa.*?bb)ますが、より正確に取得するには、正規表現パーサーが必要になります: Lightweight regex parser

于 2012-11-01T11:09:03.407 に答える