「字符类」真有那么复杂吗?其实剥开术语外壳,核心就一两句话能讲明白。下面我尽量用大白话把它说透。
关键点清单
正则元字符:.任意字符、*0+多次、?0或1次、^$开头结尾、[]字符集[^]取反、{}次数、()分组、|或、\转义。\d数字\w字母数字下划线\s空白(大写取反)。量词默认贪婪,加?非贪婪。生产环境要考虑异常、并发、性能,不能只测正常流程。版本控制和单元测试是基本功,别图省事跳过。
展开讲讲
进阶:(?:)非捕获分组、(?=)正向预查(?!)负向预查、\1反向引用。常用正则:手机^1[3-9]\d{9}$、邮箱^[\w.+-]+@[\w-]+(\.[\w-]+)+$、身份证^\d{17}[\dXx]$、IP^(\d{1,3}\.){3}\d{1,3}$。错误信息要看完整,别只看第一行,真正的根因往往在堆栈深处。日志要记关键节点和异常,出问题排查全靠它。
再强调几句
先理解概念。字符类属于开发基础知识,搞懂底层原理(编码规则、算法逻辑、协议规范)比记API更重要。原理通了,换语言换框架都能快速上手。边界情况要专门测:空值、超长、特殊字符、负数、并发。原理比API重要,原理通了换语言换框架都能快速上手。
具体怎么做
拆成几步走,照着做就行:
- 第一步:明确匹配模式(手机/邮箱/身份证/URL等)
- 第二步:用基础元字符描述:.任意、*+?次数、[]字符集、^$边界
- 第三步:用预定义类:\d数字、\w字母数字下划线、\s空白
- 第四步:量词默认贪婪,加?变非贪婪
- 第五步:用在线工具测边界案例:空串、超长、特殊字符
几个要注意的地方
有几个细节不显眼但很要命:
- 特殊字符(. * + ? ^ $ () [] {} | \)要转义
- []字符集、()分组、{}次数,新手最易混
- (?:)非捕获分组、(?=)正向预查、(?!)负向预查、\1反向引用
- 常用:手机^1[3-9]\d{9}$、邮箱^[\w.+-]+@[\w-]+(\.[\w-]+)+$
讲真,我写这篇也重新梳理了一遍自己的思路。教是最好的学,这话一点不假。
常见问题
【正则表达式怎么写?】用元字符描述模式:.任意、*+?次数、[]字符集、^$边界、()分组。\d数字\w字母\s空白。从简单开始测,复杂模式分步构建。在线测试工具即时验证很方便。
【字符类是什么?】属于开发基础知识范畴,是程序员日常会用到的概念或工具。理解原理(编码/算法/协议)比记API重要,原理通了换语言框架都能快速上手。
【贪婪匹配和非贪婪区别?】贪婪(*+{}?)尽可能多匹配,非贪婪(*?+?{}?)尽可能少。".*"贪婪会跨多个标签匹配到最后的,".*?"非贪婪匹配最近的。提取内容用非贪婪。
【常用的正则表达式有哪些?】手机^1[3-9]\d{9}$、邮箱^[\w.+-]+@[\w-]+(\.[\w-]+)+$、身份证^\d{17}[\dXx]$、URL^https?://[\w./-]+$、IP^(\d{1,3}\.){3}\d{1,3}$、邮编^\d{6}$。根据场景调整。