Logo
Section 1 / 9

简介

接下来,我们进入 C++ 中的正则表达式。第一步是理解该库的作用。

导入

简介

接下来,我们进入 C++ 中的正则表达式。第一步是理解该库的作用。

正则表达式(regular expression)是一种用于描述文本模式的语言,使用时需要包含头文件 <regex>。

正则表达式是完成以下任务的有力工具:

  • 检查文本是否匹配某个模式:std::regex_match
  • 在文本中搜索指定模式:std::regex_search
  • 将文本中的模式替换为其他内容:std::regex_replace
  • 遍历文本中所有匹配的模式:std::regex_iterator 和 std::regex_token_iterator

C++ 支持六种不同的正则表达式语法。默认情况下使用 ECMAScript 语法,这是六种语法中最强大的一种,与 Perl 5 所使用的语法非常相似。其余五种语法分别为基本(basic)、扩展(extended)、awk、grep 和 egrep 语法。

🔑 使用原始字符串
在正则表达式中建议使用原始字符串字面量。例如,表示文本 C++ 的正则表达式如果用普通字符串会显得很繁琐:C\\+\\+。这是因为每个加号前都需要两个反斜杠——首先,加号在正则表达式中是特殊字符;其次,反斜杠在字符串中也是特殊字符。因此一个反斜杠用来转义加号,另一个用来转义反斜杠本身。而使用原始字符串字面量后,就不再需要第二个反斜杠,因为原始字符串中的反斜杠不会被特殊解释。

1#include <regex> 2//... 3std::string regExpr("C\\+\\+"); 4std::string regExprRaw(R"(C\+\+)") 5```;

处理正则表达式的典型流程分为三个步骤:

I. 定义正则表达式:

1std::string text="C++ or c++."; 2std::string regExpr(R"(C\+\+)"); 3std::regex rgx(regExpr);

II. 存储搜索结果:

1std::smatch result; 2std::regex_search(text, result, rgx);

III. 处理结果:

1std::cout << result[0] << std::endl;

字符串视图

字符类型