1

boost::regex_search(start, end, what, pattern)を呼び出して、検索文字列で完全一致の開始位置を見つけた後what.position()

サブマッチのそれらの位置を見つけるにはどうすればよいですか?

私はこのようなコードを持っている必要があります:

if(boost::regex_search(start, end, what, pat))
{
    int len = what["namedGroup"].length();
    int pos = what["namedGroup"].position();
}
4

1 に答える 1

3

私は解決策を見つけました。

boost :: match_resultsの各要素(私の場合はstd :: string::const_iteratorのboost::match_results)には、検索文字列内のこのサブマッチの開始イテレーターと終了イテレーターを対応して指すプロパティfirstとsecondがあります。したがって、イテレータを使用するか、std :: distance()を介してそれらをインデックスに変換できます。

std::string::const_iterator start, end;
boost::match_results<std::string::const_iterator> what;
start = searchString.begin();
end  = searchString.end ();

if(boost::regex_search(start, end, what, pattern))
    {
        std::string::const_iterator beg = what["namedGroup"].first;
        std::string::const_iterator end = what["namedGroup"].second;
        int beginIndex = std::distance(start, beg);
    }
于 2012-05-31T14:32:25.643 に答える