在线工具集

正则表达式从入门到精通:50+ 实战模式速查

正则是开发者绕不过的工具,但语法晦涩。本指南从基础元字符到工业级模式(邮箱/手机/IP/密码强度),50+ 实战正则一次讲清。

📅 更新于 2026-04-29 · ⏱ 约 4 分钟阅读 · → 立即使用 正则表达式速查

正则表达式(Regular Expression / regex)是几乎所有编程语言、文本编辑器、日志工具都支持的字符串匹配语法。掌握它能让你 5 分钟做完 50 行 if 才能完成的事——但它的语法是出了名的反直觉,符号多、易错。本指南从最基础的元字符讲起,带你看懂业界最常用的 50+ 模式(邮箱、手机号、身份证、密码强度、URL、IP、日期、HTML 标签等),并给出每种模式的"陷阱版"对比。

正则的核心概念:贪婪与非贪婪

正则默认是"贪婪匹配"——尽量匹配最长的字符串。例如 <.*> 用于 <a><b> 时会匹配整个 <a><b>,而不是 <a>

非贪婪用 ? 修饰:<.*?> 匹配最短可能,结果是 <a><b> 各一次。

实战经验:写正则时先想能不能用贪婪,错了再改非贪婪。99% 的初学者第一版正则都是匹配过长。

工业级正则的常见陷阱

"邮箱正则"看似简单,但写得漂亮和写得对是两件事:

  • 入门版[a-z]+@[a-z]+\.[a-z]+ ——错过 + . _ 等合法字符
  • 进阶版[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,} ——本工具采用,覆盖 99% 真实邮箱
  • 完美版:RFC 5321 标准的邮箱正则有 6000+ 字符,不实用

实用建议:对邮箱、URL、电话这些"开放定义"格式,不要追求 100% 严格。本工具的中等版本能拦下绝大多数错输入,让真实合法地址通过——这才是验证的目的。

中文场景的关键模式

中文相关正则容易踩 Unicode 坑:

  • 匹配中文字符[\u4e00-\u9fa5] 是基本汉字范围,但不含部首扩展、生僻字、 emoji。要全覆盖用 [\p{Script=Han}](需 u flag)。
  • 手机号^1[3-9]\d{9}$ 是 2024 年通用,但虚拟号段(如 17X、19X)已经覆盖;早期 13X 起 4 位区间错过新号段会拦真实用户。
  • 身份证:本工具的 18 位正则只校验格式合法性,不校验校验位。校验位需要用 ISO 7064 算法计算,是单独流程。

微信号、QQ 号、车牌号这些"中国特产"模式都在本工具的速查表里。

密码强度的三个层级

  • L1 弱:6 位以上即可(淘宝早期、知乎旧版)。容易被字典攻击
  • L2 中:8 位 + 字母 + 数字。本工具默认
  • L3 强:8 位 + 大小写 + 数字 + 特殊符号。银行 / 政企标配

密码正则用了大量 (?=...) 正向预查,意思是"当前位置后面必须满足某模式但不消耗字符"。例如 (?=.*[A-Z]) 表示"字符串里某处必须有大写字母"。预查可叠加,是密码规则唯一不需要回溯的写法。

调试正则的两条铁律

  1. 永远先在测试器里跑过:本工具顶部的"在线测试"框就是为这个准备的。粘正则 + 粘文本,立即看是否匹配,错在哪一位。
  2. 不要在生产环境用未经测试的正则:尤其是用于安全验证的(密码、邮箱、URL)。一个写错的边界条件就能让攻击者绕过过滤。

复杂正则建议加注释(很多语言支持 (?x) flag 让正则跨行带注释),或者干脆拆成多个小正则用代码组合。可读性永远比"一行写完"重要。

常见问题

哪种语言的正则差异最大?

JavaScript 与 Python 几乎相同(PCRE 标准);Perl 拥有最强大的正则支持;Java 与 .NET 也大致兼容;POSIX 正则(grep/awk)较弱,不支持非贪婪和零宽断言。

正则会拖慢性能吗?

会。某些灾难性回溯(catastrophic backtracking)的正则在恶意输入下能挂掉整个进程(见 ReDoS 漏洞)。生产环境用前用 safe-regex 库扫一下。

能用正则解析 HTML 吗?

理论上可以,实际上不建议。HTML 嵌套层级正则无法处理,应该用 DOM 解析器(cheerio / jsdom)。

中文 unicode 范围哪个最准确?

`\p{Script=Han}` 最准确,覆盖所有汉字脚本字符(含日韩共用汉字)。需启用 `u` flag。