导入
简介
接下来,我们进入 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;