📅  最后修改于: 2023-12-03 15:02:52.606000             🧑  作者: Mango
match_results是C++标准库中用于存储string或者字符串流(istringstream或stringstream)与正则表达式匹配结果的类。match_results对象通常用于具体运用正则表达式时。match_results提供了一系列的成员函数,用于查询匹配结果。
match_results有两个主要的类型:
首先,需要包含regex头文件。match_results模版在regex命名空间中定义,要使用match_results类,必须使用正则表达式匹配结果作为参数进行构造函数的初始化。
以下是smatch类型的示例代码:
#include <regex>
#include <iostream>
using namespace std;
int main() {
regex reg("(\\d{4})-(\\d{2})-(\\d{2})");
smatch match;
string date = "2021-11-01";
if (regex_search(date, match, reg)) {
cout << "Year: " << match[1] << ", Month: " << match[2] << ", Day: " << match[3] << endl;
}
return 0;
}
此代码段的正则表达式进行了三次子匹配,这是因为它使用了三个括号。
在代码中,用regex_search函数查找日期字符串中是否存在符合正则表达式的内容,如果找到,则将匹配结果存储在match对象中。通过smatch对象的索引访问子匹配结果,match[0]表示整个匹配结果,match[1]表示子匹配结果中第一个括号括起来的子表达式,以此类推。
ssub_match类型的使用类似于smatch类型,只是其用于存储子匹配结果而非整个匹配结果。
match_results对象的运算符=重载定义用于将一个对象赋值(复制)到另一个对象。
以下示例代码展示了如何使用match_results运算符=来进行赋值操作。
#include <regex>
#include <iostream>
using namespace std;
int main() {
regex reg("(\\d{4})-(\\d{2})-(\\d{2})");
smatch match1, match2;
string date1 = "2021-11-01";
string date2 = "2022-12-02";
regex_search(date1, match1, reg);
match2 = match1;
cout << "Match1 Year: " << match1[1] << ", Month: " << match1[2] << ", Day: " << match1[3] << endl;
cout << "Match2 Year: " << match2[1] << ", Month: " << match2[2] << ", Day: " << match2[3] << endl;
regex_search(date2, match2, reg);
cout << "Match1 Year: " << match1[1] << ", Month: " << match1[2] << ", Day: " << match1[3] << endl;
cout << "Match2 Year: " << match2[1] << ", Month: " << match2[2] << ", Day: " << match2[3] << endl;
return 0;
}
输出结果:
Match1 Year: 2021, Month: 11, Day: 01
Match2 Year: 2021, Month: 11, Day: 01
Match1 Year: 2021, Month: 11, Day: 01
Match2 Year: 2022, Month: 12, Day: 02
在以上示例代码中,match1和match2都是smatch类型的对象。调用regex_search函数将date1和date2按照reg正则表达式进行匹配,并将匹配结果存储在match1和match2中。然后,将match1赋值给match2,此时,match2的值与match1相同。最后将date2按照reg进行匹配,并将匹配结果存储在match2中,此时,match1和match2的值不同。
match_results运算符=用于将一个对象的值复制到另一个对象。通常用于在同一程序内的不同位置使用相同的正则表达式进行匹配,同时需要保存上次的匹配结果。在进行新的匹配时,可以将上次的匹配结果复制到新的match_results对象中,然后再进行新的匹配,以便和上次的匹配结果进行比较。