如何在 boost::regex 中找到子匹配的字符串位置

How can I find position in string for submatch in boost::regex

本文关键字:位置 字符串 boost regex      更新时间:2023-10-16

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

我找到了解决方案。

boost::match_results的每个元素,在我的例子中是 std::string::const_iterator 的 boost::match_results,具有属性第一和第二,它们相应地指向搜索字符串中此子匹配的开始和结束迭代器。因此,您可以使用迭代器或通过 std::d istance() 将它们转换为索引

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