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 回答