将所有正则表达式匹配项保存在矢量上

时间:2018-06-23 02:23:39

标签: c++ regex

因此,我需要创建一个函数,该函数基于正则表达式在一个字符串上获取所有出现的匹配项,然后将它们存储在数组中,以最终在单个匹配项中选择任意捕获组号。我尝试过:

std::string match(std::string basestring, std::string regex, int index, int group) {
    std::vector<std::smatch> match;
    (here I would need to create a while statement that iterates over all matches, but I'm not sure what overload of 'regex_search' I have to use)
    return match.at(index)[group]; }

我考虑过要找到一个匹配项,然后开始搜索该匹配项的末尾位置,以便获得下一个匹配项。如果找不到匹配项,我们就假设没有其他匹配项,因此语句结束,则索引和组参数将在匹配中获得所需的捕获组。但是我似乎找不到一个“ regex_search”重载,该重载需要一个开始(或开始和结束)位置以及目标字符串。

1 个答案:

答案 0 :(得分:0)

经过数小时的挖掘,我自己找到了解决方案,该代码可以完成工作:

std::string match(std::string s, std::string r, int index = 0, int group = 0) {
    std::vector<std::smatch> match;
    std::regex rx(r);
    auto matches_begin = std::sregex_iterator(s.begin(), s.end(), rx);
    auto matches_end = std::sregex_iterator();
    for (std::sregex_iterator i = matches_begin; i != matches_end; ++i) { match.push_back(*i); }
    return match.at(index)[group]; }