C++中使用正则需包含<regex>头文件,支持regex_match(全匹配)、regex_search(搜索)和regex_replace(替换)。示例:用regex_match验证邮箱格式,regex_search提取文本中的数字,regex_replace替换空格或隐藏手机号中间四位。常用语法包括d、w、s及捕获组$1等。

C++ 使用正则表达式主要依赖于标准库中的 <regex> 头文件。从 C++11 开始,std::regex 提供了对正则表达式的完整支持,包括匹配、搜索、替换和迭代等功能。下面介绍如何进行正则表达式的基本匹配与替换操作。
包含头文件并引入命名空间
在使用正则功能前,需要包含头文件:#include <regex>
同时建议使用 std 命名空间或显式加上 std:: 前缀:
using namespace std;
正则表达式匹配(regex_match)
regex_match 用于判断整个字符串是否完全匹配某个正则模式。示例:验证一个字符串是否为合法的邮箱格式(简化版)
regex pattern(R"(^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$)");
string email = "test@example.com";
if (regex_match(email, pattern)) {
cout << "邮箱格式正确" << endl;
} else {
cout << "邮箱格式错误" << endl;
}
正则表达式搜索(regex_search)
regex_search 用于在字符串中查找符合正则表达式的子串。示例:从文本中提取所有数字
立即学习“C++免费学习笔记(深入)”;
string text = "订单编号:12345,价格:678元";
regex digits("\d+");
smatch match; // 用于保存匹配结果
while (regex_search(text, match, digits)) {
cout << "找到数字:" << match[0] << endl;
text = match.suffix(); // 更新剩余字符串继续查找
}
正则表达式替换(regex_replace)
regex_replace 可以将匹配的部分替换成指定内容,返回新字符串。示例:将多个空格替换为单个空格
string input = "a b c";
regex space_re("\s+");
string result = regex_replace(input, space_re, " ");
cout << result; // 输出: a b c
另一个例子:隐藏手机号中间四位
string phone = "13812345678";
regex phone_mask("(\d{3})\d{4}(\d{4})");
string hidden = regex_replace(phone, phone_mask, "$1****$2");
cout << hidden; // 输出: 138****5678
常见正则语法简要说明
- d:匹配数字,等价 [0-9]
- w:匹配字母、数字、下划线
- s:匹配空白字符(空格、制表符等)
- *:前一项出现 0 次或多次
- +:前一项出现 1 次或多次
- ?:前一项出现 0 次或 1 次
- {n,m}:前一项出现 n 到 m 次
- ^:匹配开头;$:匹配结尾
- \. 或 \s 等需转义时用双反斜杠
基本上就这些。C++ 的 regex 功能足够应对大多数文本处理需求,虽然性能不如某些专用库,但标准库支持使其易于移植和使用。











