正则表达式(Regular Expression,regex)是你职业生涯里一定会遭遇的东西:日志过滤、数据验证、代码重构、文本提取,处处都有它的身影。但 2026 年的现实是:你不再需要从头手写正则,AI 可以根据你的描述生成候选;你真正需要的,是能读懂它、能验证它、能判断它是否合适。

这篇文章的目标不是让你成为正则专家,而是让你具备那两个核心能力:读懂一段正则在匹配什么,以及准确描述你要匹配什么

1. 正则是什么,解决什么问题

正则表达式是一种文本模式描述工具。它回答的问题很简单:这段文字是否符合某种模式?

典型场景:

  • 验证格式:用户输入的邮箱、手机号是否合法
  • 提取信息:从一堆日志里提取时间戳、IP 地址、错误码
  • 批量替换:把日期格式从 2026/06/04 统一改成 2026-06-04
  • IDE 重构:用正则批量重命名函数或变量

正则不是万能的。处理 HTML、JSON、YAML、SQL 这类有嵌套结构的格式,正则会很快失控——应该用对应的解析器(parser),而不是正则。一个经典的教训是试图用正则解析 HTML,最终写出一个充满边界漏洞的怪物。

2. 三种基本操作

所有的正则表达式,本质上只是三种操作的组合:描述字符描述重复描述分组与选择。理解这三层,你就能读懂 90% 的正则。

描述字符

最基础的操作——说清楚你要匹配什么字符。

字面量直接写:a 匹配字母 a,3 匹配数字 3。

几个必须知道的特殊符号:

符号匹配内容
.任意单个字符(换行除外)
\d任意数字,等价于 [0-9]
\w字母、数字、下划线,等价于 [a-zA-Z0-9_]
\s空白字符(空格、Tab、换行)
[abc]a、b、c 中任意一个
[^abc]除 a、b、c 之外的任意字符
[a-z]a 到 z 的任意小写字母

锚点是定位符,不匹配字符本身,而是匹配位置:

符号含义
^行首
$行尾
\b单词边界(单词和非单词字符之间的位置)

^hello$ 表示整行就是 “hello”,不允许前后有其他内容。

描述重复

量词说明一个字符或模式出现多少次:

符号含义
*0 次或多次
+1 次或多次
?0 次或 1 次
{n}恰好 n 次
{n,m}n 到 m 次

\d{4}-\d{2}-\d{2} 就是”4 位数字 - 2 位数字 - 2 位数字”,匹配 2026-06-04 这样的日期格式。读起来并不难。

描述分组与选择

括号 () 把多个字符当作整体,可以对这个整体应用量词,也可以在替换时反向引用捕获的内容:

(ha)+    →  匹配 "ha"、"haha"、"hahaha"

[] 是字符集,匹配其中任意一个字符:

[aeiou]  →  匹配任意一个英文元音字母

| 是选择,相当于”或”:

cat|dog  →  匹配 "cat" 或 "dog"

3. 贪婪与惰性:最常踩的坑

量词默认是贪婪的:它会尽可能多地匹配字符,直到不得不停止。量词加上 ? 变成惰性:它尽可能少地匹配,遇到第一个能停下来的位置就停。

用 HTML 标签做例子,最直观:

文本:<b>粗体</b>普通<b>又粗</b>
 
贪婪:<b>(.*)</b>
→ 匹配到:粗体</b>普通<b>又粗
(从第一个 <b> 一路吃到最后一个 </b>)
 
惰性:<b>(.*?)</b>
→ 匹配到:粗体
(遇到第一个 </b> 就停下来)

实践规律:只要你在匹配”两个标记之间的内容”,几乎都需要惰性量词 .*?。贪婪匹配的默认行为很常让人困惑,AI 生成的正则如果结果不对,第一个要检查的就是这里。

4. AI 时代的使用姿态

过去学正则的路是:记语法 → 手写 → 调试 → 反复调试。这条路苦,而且记住的东西很快忘。

今天更合理的工作流:

描述需求(准确)→ AI 生成候选 → 用样例验证 → 收窄边界

你不需要记忆正则语法,但你需要能:

  1. 读懂它:AI 给你一段正则,你能拆开看,知道每个部分在匹配什么,判断是否合理
  2. 描述清楚:你能说清楚”我要匹配什么格式、允许哪些变体、排除哪些边界情况”,AI 才能给出准确的候选

描述不清楚是 AI 生成正则出错的主要原因,不是 AI 不够强——是你没说清楚”邮箱只能是公司邮箱”、“手机号不包含区号”、“URL 不包含括号内的链接”这类约束。

验证的基本动作

  • 准备正例:应该匹配的样本(检查是否能匹配)
  • 准备反例:不应该匹配的样本(检查是否会误伤)
  • regex101.com 逐符号检查含义,贪婪/惰性切换一眼就能看到效果

什么时候不该用正则

  • 解析 HTML / XML → 用 DOM parser 或 BeautifulSoup
  • 解析 JSON / YAML → 用对应的解析库
  • 解析有嵌套结构的文本 → 用 parser,正则处理不了嵌套层级
  • 需要”理解语义”而不只是”匹配格式” → 正则只识别模式,不理解含义

5. 够用的最小知识集

你需要记住的,其实只有这些:

字符描述.(任意)、\d(数字)、\w(单词字符)、\s(空白)、[...](字符集)、[^...](排除集)

量词*(0+)、+(1+)、?(0 或 1)、{n,m}(n 到 m 次),加 ? 变惰性

锚点^(行首)、$(行尾)、\b(单词边界)

分组(...) 捕获组、| 选择

最重要的实践规律:两个标记之间的内容用惰性 .*?,用 regex101 验证,准备正反例。

不需要记的:lookahead/lookbehind(前后瞻断言)、非捕获组 (?:...)、具名捕获组 (?P<name>...)、条件正则、atomic groups——这些遇到时查文档,或者让 AI 生成,能读懂即可。

理解正则的结构,目的不是让你手写一切,而是让你在 AI 给出候选方案时,能判断它对不对、能收窄描述让它改得更准、能在出错时定位到哪个部分需要调整。这是分工,不是放弃。