C++ 11 Regex查找捕获组标识符

The*_*ski 5 c++ regex c++11

我已经查看了C++ 11的新正则表达式库的许多来源,但是大多数都关注语法,或者更基本的用法,例如regex_match或regex_search.虽然这些文章帮助我开始使用正则表达式库,但我很难找到有关捕获组的更多详细信息.

我想要完成的是找出匹配所属的捕获组.到目前为止,我只找到了一种方法来做到这一点.

#include <iostream>
#include <string>
#include <regex>

int main(int argc, char** argv)
{
    std::string input = "+12 -12 -13 90 qwerty";
    std::regex pattern("([+-]?[[:digit:]]+)|([[:alpha:]]+)");

    auto iter_begin = std::sregex_token_iterator(input.begin(), input.end(), pattern, 1);
    auto iter_end = std::sregex_token_iterator();

    for (auto it = iter_begin; it != iter_end; ++it)
    {
        std::ssub_match match = *it;
        std::cout << "Match: " << match.str() << " [" << match.length() << "]" << std::endl;
    }

    std::cout << std::endl << "Done matching..." << std::endl;
    std::string temp;
    std::getline(std::cin, temp);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在改变第四个参数的值时std::sregex_token_iterator,我可以控制它将保留哪个子匹配,告诉它丢弃其余的子匹配.因此,为了找出匹配所属的捕获组,我可以简单地遍历捕获组以找出特定组不丢弃哪些匹配.

但是,这对我来说是不受欢迎的,因为除非在后台进行一些缓存,否则我希望每个构造std::sregex_token_iterator都能通过输入并再次找到匹配(有人请纠正我,如果这是错误的,但这是最好的结论我可以来).

有没有更好的方法来找到匹配所属的捕获组?或者是在子匹配上迭代最佳行动方案?

nha*_*tdh 6

regex_iterator改用.您将可以访问match_results包含所有sub_matches的每个匹配,您可以在其中检查匹配所属的捕获组.