首页 > 后端开发 > C++ > 正文

C 中 std::match_results::size() 返回多少项?

Patricia Arquette
发布: 2024-11-08 13:40:02
原创
534 人浏览过

How Many Items Does std::match_results::size() Return in C  ?

std::match_results::size() 返回什么?

在 C 11 中, std::match_results::size( ) 函数返回匹配结果对象中捕获组的数量加一(整个匹配

考虑以下代码:

<code class="cpp">#include <iostream>
#include <string>
#include <regex>

int main() {
    std::string haystack("abcdefabcghiabc");
    std::regex needle("abc");
    std::smatch matches;
    std::regex_search(haystack, matches, needle);
    std::cout << matches.size() << std::endl;
}</code>
登录后复制

此代码查找字符串“abcdefabcghiabc”中第一次出现的子字符串“abc”,并将匹配结果存储在 matches 对象中。令人惊讶的是,调用 matches.size() 返回 1 而不是 3(预期的匹配数)。

此行为的解释是,regex_search() 仅返回一个匹配项,而 size() 包含完整的匹配项匹配和任何捕获组。在这种情况下,没有捕获组,因此 size() 返回 1(仅完全匹配)。

查找多个匹配

要查找并计算多个匹配,使用 std::sregex_iterator 或 std::wsregex_iterator (对于宽字符串)。下面是一个使用 std::sregex_iterator 的示例:

<code class="cpp">#include <iostream>
#include <string>
#include <regex>
using namespace std;

int main() {
    std::regex r("abc");
    std::string s = "abcdefabcghiabc";
    int count = 0;
    for (std::sregex_iterator i = std::sregex_iterator(s.begin(), s.end(), r);
        i != std::sregex_iterator();
        ++i) {
        count++;
    }
    cout << "Number of matches: " << count << endl;
}</code>
登录后复制

此代码迭代字符串中“abc”的所有匹配项并对其进行计数。

捕获组

如果您的正则表达式包含捕获组(带括号的子表达式),则匹配结果的大小也将包括捕获组。例如,如果您有一个匹配“abc(def)”的正则表达式,并且输入字符串包含“abcdef”,则匹配结果的大小将为 2(完全匹配并捕获组“def”)。

以上是C 中 std::match_results::size() 返回多少项?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板