📅  最后修改于: 2023-12-03 14:59:46.572000             🧑  作者: Mango
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类提供了一个方便的接口,用于访问正则表达式匹配的结果。下标运算符[]是这个类的重要成员之一,可以方便地访问正则表达式中的子表达式。但需要注意使用方法和结果类型,以避免出现异常和错误。