📜  match_results运算符= C++(1)

📅  最后修改于: 2023-12-03 15:02:52.606000             🧑  作者: Mango

C++中的match_results运算符=

介绍

match_results是C++标准库中用于存储string或者字符串流(istringstream或stringstream)与正则表达式匹配结果的类。match_results对象通常用于具体运用正则表达式时。match_results提供了一系列的成员函数,用于查询匹配结果。

match_results有两个主要的类型:

  • smatch,用于存储string的匹配结果。
  • ssub_match,用于存储string的子匹配结果。
使用方法

首先,需要包含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对象的运算符=重载定义用于将一个对象赋值(复制)到另一个对象。

以下示例代码展示了如何使用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对象中,然后再进行新的匹配,以便和上次的匹配结果进行比较。