如何在boost :: regex中找到submatch的字符串位置

时间:2012-05-31 14:04:40

标签: c++ boost-regex

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();
}

1 个答案:

答案 0 :(得分:3)

我找到了解决方案。

boost :: match_results的每个元素,在我的例子中,std :: string :: const_iterator的boost :: match_results,都有第一个和第二个属性,它相应地指向搜索字符串中此子匹配的开始和结束迭代器。因此,您可以使用迭代器或通过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);
    }