正在加载,请稍候…

正则表达式速查表:你真正需要的每个正则模式

正则表达式实用参考——锚点、量词、字符类、前瞻后顾,以及电子邮件、URL、IP、日期等真实世界模式

正则表达式速查表:你真正需要的每个正则模式

正则表达式一览

正则表达式(regex)是定义搜索模式的字符序列。相同的语法适用于 JavaScript、Python、Go、Java、PHP、Ruby 以及大多数现代语言——仅存在细微的方言差异。

学会正则表达式一次,你就能在编辑器查找替换、grepsed 等命令行工具、日志分析管道、表单验证以及数据提取脚本中随处使用。

正则表达式速查表:你真正需要的每个正则模式插图

锚点

锚点不匹配字符——它们匹配位置。

模式 匹配
^ 字符串开头(多行模式下为行开头)
$ 字符串结尾(多行模式下为行结尾)
\b 单词边界(\w 和 \W 之间)
\B 非单词边界
^hello        匹配 "hello world" 但不匹配 "say hello"
world$        匹配 "hello world" 但不匹配 "worldwide"
\bcat\b      匹配 "cat" 但不匹配 "concatenate"

字符类

模式 匹配
. 除换行符外的任意字符
\d 数字:[0-9]
\D 非数字:[^0-9]
\w 单词字符:[a-zA-Z0-9_]
\W 非单词字符
\s 空白字符:空格、制表符、换行符
\S 非空白字符
[abc] a、b 或 c
[^abc] 除 a、b、c 之外的任意字符
[a-z] 任意小写字母
[A-Za-z0-9] 字母数字

量词

模式 含义
* 0 次或多次
+ 1 次或多次
? 0 次或 1 次(可选)
{n} 恰好 n 次
{n,} n 次或更多
{n,m} n 到 m 次之间
*? 0 次或多次,懒惰(非贪婪)
+? 1 次或多次,懒惰

贪婪 vs 懒惰:默认情况下,量词是贪婪的——它们尽可能多地匹配。添加 ? 使其懒惰——它们尽可能少地匹配。

输入:<b>bold</b> and <i>italic</i>

贪婪  <.*>   匹配整个字符串
懒惰  <.*?>  分别匹配 <b>、</b>、<i>、</i>

分组与选择

模式 含义
(abc) 捕获分组
(?:abc) 非捕获分组
(?<name>abc) 命名捕获分组
`a b`
\1 对分组 1 的反向引用

命名分组使复杂模式更易读:

(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})

匹配 2026-05-21,并允许你访问 match.groups.yearmatch.groups.monthmatch.groups.day

前瞻与后顾

这些断言某个位置之前或之后的内容,但不将其包含在匹配中:

模式 含义
(?=abc) 正向前瞻:后面跟着 abc
(?!abc) 负向前瞻:后面不跟着 abc
(?<=abc) 正向后顾:前面是 abc
(?<!abc) 负向后顾:前面不是 abc
\d+(?= dollars)   匹配 "100 dollars" 中的 "100",但不匹配 "100 euros"
(?<=\$)\d+        匹配美元符号后的数字

正则表达式速查表:你真正需要的每个正则模式插图

标志

标志 效果
g 全局——查找所有匹配,而非仅第一个
i 不区分大小写
m 多行——^ 和 $ 匹配行边界
s 点号通配——点号也匹配换行符
u Unicode 模式

真实世界模式

电子邮件地址(实用)

^[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$

覆盖绝大多数真实电子邮件地址。注意:完整的 RFC 5321 规范允许大多数真实世界电子邮件从不使用的字符。此模式有意拒绝边缘情况。

URL

https?://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,}(/[\w\-\./\?\=\&\#\%]*)?

IPv4 地址

^((25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)$

验证每个八位字节为 0–255,拒绝 999.0.0.1

正则表达式速查表:你真正需要的每个正则模式插图

ISO 日期(YYYY-MM-DD)

^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$

十六进制颜色代码

^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$

信用卡号(基本格式检查)

^(?:4\d{12}(?:\d{3})?|5[1-5]\d{14}|3[47]\d{13}|6(?:011|5\d{2})\d{12})$

匹配 Visa、Mastercard、Amex、Discover 格式。不通过 Luhn 算法验证。

密码(至少 8 个字符,需要字母和数字)

^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d@$!%*#?&]{8,}$

Slug(URL 安全字符串)

^[a-z0-9]+(?:-[a-z0-9]+)*$

常见错误

忘记转义点号:在正则中,. 匹配任意字符。要匹配字面句点,请写 \.。模式 myfile.txt 会匹配 myfileXtxt——通常不是你想要的。

灾难性回溯:嵌套量词如 (a+)+ 在某些输入上可能导致指数级时间。避免多个量词可以匹配相同字符的模式。

验证模式未锚定:没有 ^$,像 \d{4} 这样的模式会匹配输入中任意位置的四位数字子串——它不会拒绝 abc1234def

需要懒惰时使用了贪婪匹配:提取标签间内容时,贪婪的 <.*> 会从第一个开标签抓取到最后一个闭标签。应改用 <.*?>

测试你的模式

→ 使用 Regex Tester 编写和测试模式,支持实时高亮、捕获组检查和匹配详情。

Regex Cheat Sheet 提供常见模式的快速参考卡,全部在一个可滚动视图中。