📜  C++ STL中的match_results运算符[](1)

📅  最后修改于: 2023-12-03 14:59:46.572000             🧑  作者: Mango

C++ STL中的match_results运算符[]

C++标准库中的regex库提供了一个名为match_results的类,用于存储正则表达式匹配的结果。这个类提供了多个成员函数和操作符,用于访问匹配结果的各个部分。

其中,运算符[](中括号操作符)用于访问匹配的子表达式,即正则表达式中用圆括号括起来的部分,也称为“捕获组”。

使用方法

match_results类的成员函数size()返回匹配的子表达式数量,下标运算符[]可以访问匹配的子表达式,下标从0开始。

#include <iostream>
#include <regex>

int main()
{
    std::regex pattern(R"((\d{4})-(\d{2})-(\d{2}))");

    std::string date = "2022-10-20";
    std::smatch result;

    std::regex_search(date, result, pattern);
    for (int i = 0; i < result.size(); i++)
    {
        std::cout << "Match " << i << ": " << result[i] << std::endl;
    }

    std::cout << "Year: " << result[1] << std::endl;
    std::cout << "Month: " << result[2] << std::endl;
    std::cout << "Day: " << result[3] << std::endl;

    return 0;
}

输出结果为:

Match 0: 2022-10-20
Match 1: 2022
Match 2: 10
Match 3: 20
Year: 2022
Month: 10
Day: 20

在上述示例中,正则表达式中有三个子表达式,用于匹配日期中的年、月、日。在输出结果时,使用了下标运算符[]访问匹配的子表达式。第一个下标访问整个匹配结果,其余的下标分别对应正则表达式中的子表达式。

注意事项

需要注意的是,如果在匹配过程中没有用到圆括号括起来的子表达式,那么使用下标访问这些子表达式时会抛出out_of_range异常。

在使用下标运算符[]时,还需要注意结果类型。如果匹配成功,下标运算符返回一个字符串对象,包含了匹配到的子表达式。如果匹配失败,下标运算符返回一个空的字符串对象。

总结

match_results类提供了一个方便的接口,用于访问正则表达式匹配的结果。下标运算符[]是这个类的重要成员之一,可以方便地访问正则表达式中的子表达式。但需要注意使用方法和结果类型,以避免出现异常和错误。