如何使用std :: regex获取所有捕获?

时间:2019-09-11 17:22:21

标签: c++ regex

我正在尝试分解由一系列文件夹名称组成的路径:

“ / foldera / folderb / folderc”

进入

“ / foldera”“ / folderb”“ / folderc”

但是我找不到使用std :: regex的方法,

{
    std::regex exp("^(/[a-zA-Z0-9-_]+)+");
    std::smatch res;
    std::string str = "/uuu/kkk";

    std::regex_search( str, res, exp ) ;
    {
        std::cout << res[0] <<";" << res[1] << std::endl;  
    }
    std::cout << std::endl;
}

它将仅匹配整个字符串或最后一个“ / kkk”,

我永远找不到匹配项“ / uuu”

我知道问题可以通过字符串拆分解决,但是我对这里的std :: regex解决方案感兴趣,因为上述内容对javascript和Qt的正则表达式是可行的。但是我不知道如何用std :: regex做到这一点。

PS。以下内容也不起作用:

{
    const std::string s = "/uuu/kkk";

    std::regex words_regex("(/[a-zA-Z0-9-_]+)+");
    auto words_begin = 
        std::sregex_iterator(s.begin(), s.end(), words_regex);
    auto words_end = std::sregex_iterator();

    std::cout << "Found " 
          << std::distance(words_begin, words_end) 
          << " words:\n";

    for (std::sregex_iterator i = words_begin; i != words_end; ++i) {
        std::smatch match = *i;                                                 
        std::string match_str = match.str(); 
        std::cout << match_str << '\n';
    }  
}

0 个答案:

没有答案