代码之家  ›  专栏  ›  技术社区  ›  The Dreams Wind

从最后一个匹配项到第一个匹配项迭代正则表达式匹配项

  •  0
  • The Dreams Wind  · 技术社区  · 3 年前

    如果我没有遗漏任何东西,那么所有STL正则表达式迭代器都会陷入 forward only category ,因此我实际上无法从最后一个正则表达式匹配迭代到第一个正则表达式匹配。当然,我可以引入这样一个额外的容器:

    std::string iterateRegexFromEnd(std::string s) {
        std::regex expression("\\w+");
        std::regex_iterator<std::string::iterator> itend;
        std::regex_iterator<std::string::iterator> iterator(s.begin(), s.end(), expression);
        std::vector<std::string> matches;
        while (iterator != itend) {
            matches.push_back(iterator->str());
            ++iterator;
        }
    
        for (auto matchIterator = matches.rbegin(); matchIterator != matches.rend(); ++matchIterator) {
            if (matchIterator != matches.rbegin()) {
                std::cout << ", ";
            }
            std::cout << *matchIterator;
        }
        std::cout << std::endl;
    }
    

    但这看起来有些过分。有什么(或多或少)优雅的方式来配置STL吗 regex 返回从最后一个到第一个匹配项的算法/表达式?

    0 回复  |  直到 3 年前