C++11起通过头文件支持正则表达式,主要使用std::regex、std::smatch及regex_match、regex_search、regex_replace函数进行匹配、搜索和替换操作,需注意编译器兼容性、性能限制和异常处理。

在C++中使用正则表达式需要借助标准库中的
包含头文件
要使用正则表达式功能,首先需要引入头文件:
#include常用类和函数说明
std::regex 相关的主要组件包括:
- std::regex:编译后的正则表达式对象
- std::smatch:用于保存字符串匹配结果(std::string 版本)
- std::regex_match():判断整个字符串是否匹配正则表达式
- std::regex_search():在字符串中搜索符合正则表达式的子串
- std::regex_replace():替换匹配的文本
基本用法示例
下面通过几个常见场景展示如何使用。
立即学习“C++免费学习笔记(深入)”;
1. 判断字符串是否完全匹配
1 系统使用三层构架2 数据库访问使用sqlHelper3 编辑器使用FreeTextBox4 布局采用Div+Css5 正则表达式实现数据验证6 动态构建sql查询语句
#include
#include
int main() {
std::string text = "123-456-7890";
std::regex pattern(R"(\d{3}-\d{3}-\d{4})"); // 匹配电话格式
if (std::regex_match(text, pattern)) {
std::cout } else {
std::cout }
return 0;
}
2. 搜索并提取子串(分组捕获)
std::string log = "Error: User not found at 14:30:25";std::regex time_pattern(R"((\d{2}):(\d{2}):(\d{2}))");
std::smatch match;
if (std::regex_search(log, match, time_pattern)) {
std::cout std::cout std::cout std::cout }
match[0] 是完整匹配,match[1], match[2]... 对应括号内的捕获组。
3. 替换文本
std::string input = "Call me at 123-456-7890";std::regex phone_pattern(R"(\d{3}-\d{3}-\d{4})");
std::string result = std::regex_replace(input, phone_pattern, "XXX-XXX-XXXX");
std::cout
注意事项与建议
虽然 std::regex 功能完整,但在实际使用中需要注意以下几点:
- 不同编译器对正则的支持程度可能有差异,特别是早期 GCC 版本存在 bug,建议使用较新版本(如 GCC 9+)
- 性能方面不如专用库(如 RE2),对于高频匹配操作需谨慎评估
- 错误处理:构造 regex 时若正则语法错误会抛出 std::regex_error 异常,可加 try-catch 防止崩溃
- 原始字符串字面量(R"(...)")能避免反斜杠转义问题,推荐使用
基本上就这些。掌握 regex_match、regex_search 和 regex_replace 这三个核心函数,就能应对大多数文本处理需求。不复杂但容易忽略的是异常安全和编译器兼容性问题。










