正则表达式速查表:常用元字符与实战实例
把最常用的正则元字符、量词、分组与断言整理成一张能贴在手边的表,再配上手机号、日期、IP、邮箱等常见校验实例,以及贪婪与非贪婪的区别。
正则不需要背,需要的是知道「有这个东西」然后查。这份速查表按用途组织,配合正则测试工具实时验证。
元字符:单个字符的匹配
.任意字符(默认不含换行)\d数字,等价[0-9]\D非数字\w单词字符(字母、数字、下划线)\W非单词字符\s空白(空格、制表符、换行)\S非空白[abc]字符集合中的任意一个[^abc]除这些字符外的任意一个[a-z]范围
量词:控制出现次数
*0 次或多次+1 次或多次?0 次或 1 次{n}恰好 n 次{n,}至少 n 次{n,m}n 到 m 次
贪婪与非贪婪是高频踩坑点:默认贪婪,<.*> 会把 <a><b> 整段匹配进去;加上 ? 变成 <.*?>,只匹配到第一个 >。
分组与引用
(abc)捕获分组,可以用\1反向引用(?:abc)非捕获分组,只分组不占编号(?<name>abc)命名分组,便于取语义化的值a|b或
边界与断言
^行开头(多行模式下每行开头)$行结尾\b单词边界(?=abc)前瞻:后面必须是 abc(?!abc)否定前瞻:后面不能是 abc(?<=abc)后顾:前面必须是 abc
断言只做「看一眼」的判断,不消耗字符,这在替换场景里特别有用。
常用实例
中国大陆手机号:
^1[3-9]\d{9}$
日期(YYYY-MM-DD,宽松校验):
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
IPv4(每段 0~255):
^((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)$
提取 HTML 标签之间的文本(非贪婪):
>([^<]*)<
三条实战建议
第一,能不用正则就不用。解析 JSON、XML、HTML 请用对应解析器——正则处理嵌套结构注定不可靠。
第二,注意回溯爆炸。像 (a+)+$ 这种嵌套量词在长字符串上会指数级耗时,是正则拒绝服务(ReDoS)的典型来源。约束输入长度、避免嵌套量词。
第三,大小写与多行的开关别忘了。i 忽略大小写、m 多行、s 让 . 匹配换行、g 全局。少开一个,行为差很远。