你要在几百行日志里找出所有邮箱,要在表单里校验手机号格式,要把一堆乱文本按规则批量重排——这些事如果靠肉眼和复制粘贴,能累到怀疑人生。正则表达式(Regular Expression,简称正则)就是为这类"按模式处理文本"而生的语言。它看着像乱码,实则是极省力的工具。
一、正则解决什么问题
普通查找是"找这个固定字符串"。正则找的是"符合某类模式的字符串":不是"找 abc",而是"找连续三位数字""找以 http 开头的一串网址""找两个逗号之间的内容"。一旦你掌握它,文本筛选、抽取、清洗的效率会成倍提升。
它几乎无处不在:代码编辑器、命令行、编程语言(Python、JS)、甚至一些办公软件都支持正则。
二、几个最基础的符号
不用背全套,先懂最常用的几类:
- 字符类:
\d匹配数字,\w匹配字母数字下划线,.匹配任意字符(除换行)。 - 量词:
*表示"零个或多个",+表示"一个或多个",?表示"零个或一个",{3}表示"正好三个",{2,4}表示"两到四个"。 - 锚点:
^匹配开头,$匹配结尾,用来限定"整段必须怎样"。 - 分组与或:用括号
( )把部分圈起来,用|表示"或",比如(cat|dog)匹配猫或狗。 - 转义:想匹配字面意义的
.或*这类特殊符号,前面加反斜杠\。
举例:^\d{6}$ 表示"从头到尾正好六位数字"——这正是很多验证码、邮编格式校验的写法。
三、常见用途
- 校验:手机号、邮箱、身份证、密码强度,用一条正则快速判断格式对不对。
- 抽取:从一段文本里抓出所有链接、所有日期、所有金额。
- 替换:把全角括号统一成半角、把多余空格压成一个、给每行加序号。
- 拆分:按逗号、空白或自定义分隔符把长串拆成数组。
掌握了"字符 + 量词 + 锚点"这三板斧,八成日常需求都能覆盖。
四、用工具少踩坑
正则写错太常见:少一个转义就匹配到不该匹配的,贪婪量词 .* 一口气吞掉半篇文章。与其在脑子里空转,不如边写边测。把你的文本和表达式贴进正则测试器,实时看到匹配高亮,哪里错了立刻改;需要批量改动时,用正则替换工具按规则一键替换,比手动快且不易漏。
五、别把正则当锤子
两句提醒:第一,极复杂的嵌套结构(比如匹配任意层级的 HTML 标签)不该用正则硬刚,交给专门的解析器更稳。第二,可读性很重要——三个月后你(或同事)再看那条长达三行、毫无注释的正则,大概率看不懂。关键处加注释,或拆成几步简单正则,比一条"神正则"更负责任。
小结
正则是一种"用模式描述文本"的紧凑语言,擅长查找、校验、抽取、替换。记住字符类、量词、锚点三块核心,再用测试工具边写边验,你就能把大量重复的文字活儿交给机器。它的威力在于精确而省力——前提是,别拿它去解决本不该用它的复杂问题。