与 regex_search 一起使用的 match_results::size 的返回值

问题描述

我不确定我是否完全理解 std::match_results::size 返回的内容。 根据 cppreference 它“返回子匹配的数量”。

我可能误解了这个描述。 在我看来,函数返回的是第一次出现的结果,而不是完整的字符串。 matches[0] 是完全匹配,matches[1] 是子匹配,matches[2] 是字符串的其余部分。

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

int main ()
{
    std::string s ("this subject has a submarine as a subsequence called subaru");
    std::smatch matches;
    std::regex pattern ("\\b(sub)([^ ]*)");   // matches words beginning by "sub"
    
    std::cout << "Target sequence: " << s << std::endl;
    std::cout << "Regular expression: /\\b(sub)([^ ]*)/" << std::endl;
    std::cout << "The following matches and submatches were found:" << std::endl;
    
    std::regex_search (s,matches,pattern);
    std::cout << "size: " << matches.size() << "\n";


    std::cout << "Results: \n";
    while (std::regex_search (s,pattern)) {
        std::cout << matches[0] << " " << matches[1] << " " << matches[2] << "\n";  // match,submatch,rest
        s = matches.suffix().str();
    }

  return 0;
}

基于: https://en.cppreference.com/w/cpp/regex/regex_search

http://www.cplusplus.com/reference/regex/regex_search/?kw=regex_search

演示http://coliru.stacked-crooked.com/a/056462e884896604

描述表明,如果提到 string 调用 size() 应该返回数字 4。(因为句子中有四个“子”) 实际上,size() 返回匹配项和子匹配项,但只返回第一次出现。 此功能是否记录错误或我误解了它的工作原理?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)