C++ 正则表达式及示例:面向初学者的完整指南
正则表达式 (regex) 是一种强大的工具,用于按模式搜索、验证和替换文本。在 C++ 中,通过 <regex> 库实现正则表达式的操作,该库自 C++11 标准起引入。本文将通过实用的示例,讲解在 C++ 中使用 regex 的基础知识,即使是初学者也能轻松理解。
什么是正则表达式,为什么需要它们?
正则表达式是一系列字符,定义了在文本中搜索的模式。例如,模式 \\d{3}-\\d{2}-\\d{2} 描述了 SNILS 号码的格式:三位数字、连字符、两位数字、连字符、两位数字。
C++ 中正则表达式解决的主要任务包括:
- 验证输入的正确性(电子邮件、电话号码、日期)
- 从文本中提取数据
- 搜索和替换子字符串
- 根据复杂分隔符拆分字符串
<regex> 库提供了三种主要算法:
std::regex_match— 字符串与模式的完全匹配std::regex_search— 在字符串中搜索匹配项std::regex_replace— 根据模式替换匹配项
C++ 中正则表达式的基本语法
在编写代码之前,我们先了解 regex 语法中的基本元素,这些元素将在示例中用到:
| 符号 | 含义 | 示例 |
|---|---|---|
. | 任意字符(除换行符外) | c.t — cat, cot, cut |
\\d | 数字 (0-9) | \\d\\d — 23, 45, 99 |
\\w | 字母、数字或下划线 | \\w+ — 单词 |
\\s | 空白字符 | \\s+ — 一个或多个空格 |
* | 0 次或多次重复 | ab*c — ac, abc, abbc |
+ | 1 次或多次重复 | ab+c — abc, abbc(不包括 ac) |
? | 0 次或 1 次重复 | colou?r — color, colour |
{n} | 恰好 n 次重复 | \\d{3} — 123, 456 |
[abc] | 集合中的任意字符 | [aeiou] — 元音字母 |
() | 捕获组 | (\\d{2})-(\\d{2}) |
示例 1:使用 regex_match 验证电子邮件地址
我们从简单的开始——检查字符串是否符合电子邮件格式。使用 std::regex_match,它要求完全匹配。
#include <iostream>#include <regex>#include <string>
int main() { std::string email = "user@example.com"; // 简单的电子邮件模式: // [\\w.]+ — 一个或多个字符(字母、数字、点、下划线) // @ — 符号 // [\\w.]+ — 域名 // \\.[a-z]{2,} — 点和顶级域名(至少 2 个字母) std::regex pattern(R"([\\w.]+@[\\w.]+\\.\\w{2,})"); if (std::regex_match(email, pattern)) { std::cout << "电子邮件有效" << std::endl; } else { std::cout << "电子邮件无效" << std::endl; } // 无效电子邮件示例 email = "user@com"; if (std::regex_match(email, pattern)) { std::cout << "电子邮件有效" << std::endl; } else { std::cout << "电子邮件无效" << std::endl; } return 0;}运行结果:
电子邮件有效电子邮件无效请注意