前阵子我妈打电话问我「量词」,说小区群里吵翻天了。我让她把群里说法截个图过来,好家伙,五个人五种答案,没一个对的。
关键点清单
正则元字符:.任意字符、*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更重要。原理通了,换语言换框架都能快速上手。光看不动手永远学不透,写个小demo跑一遍胜过读十篇文章。安全三件套:防SQL注入、防XSS、防CSRF,缺一不可。
具体怎么做
我把流程简化成这几步,你照着来:
- 第一步:明确匹配模式(手机/邮箱/身份证/URL等)
- 第二步:用基础元字符描述:.任意、*+?次数、[]字符集、^$边界
- 第三步:用预定义类:\d数字、\w字母数字下划线、\s空白
- 第四步:量词默认贪婪,加?变非贪婪
- 第五步:用在线工具测边界案例:空串、超长、特殊字符
几个要注意的地方
有几个细节不显眼但很要命:
- 特殊字符(. * + ? ^ $ () [] {} | \)要转义
- []字符集、()分组、{}次数,新手最易混
- (?:)非捕获分组、(?=)正向预查、(?!)负向预查、\1反向引用
- 常用:手机^1[3-9]\d{9}$、邮箱^[\w.+-]+@[\w-]+(\.[\w-]+)+$
最后一句:别迷信任何"教程",包括这篇。自己算一遍,才是真懂了。
常见问题
【常用的正则表达式有哪些?】手机^1[3-9]\d{9}$、邮箱^[\w.+-]+@[\w-]+(\.[\w-]+)+$、身份证^\d{17}[\dXx]$、URL^https?://[\w./-]+$、IP^(\d{1,3}\.){3}\d{1,3}$、邮编^\d{6}$。根据场景调整。
【正则表达式怎么写?】用元字符描述模式:.任意、*+?次数、[]字符集、^$边界、()分组。\d数字\w字母\s空白。从简单开始测,复杂模式分步构建。在线测试工具即时验证很方便。
【量词是什么?】属于开发基础知识范畴,是程序员日常会用到的概念或工具。理解原理(编码/算法/协议)比记API重要,原理通了换语言框架都能快速上手。
【贪婪匹配和非贪婪区别?】贪婪(*+{}?)尽可能多匹配,非贪婪(*?+?{}?)尽可能少。".*"贪婪会跨多个标签匹配到最后的,".*?"非贪婪匹配最近的。提取内容用非贪婪。