面向初学者的 C++ 正则表达式及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

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;}


运行结果:

电子邮件有效电子邮件无效


请注意

博客

书籍推荐