你要在几百行日志里找出所有邮箱,要在表单里校验手机号格式,要把一堆乱文本按规则批量重排——这些事如果靠肉眼和复制粘贴,能累到怀疑人生。正则表达式(Regular Expression,简称正则)就是为这类"按模式处理文本"而生的语言。它看着像乱码,实则是极省力的工具。

一、正则解决什么问题

普通查找是"找这个固定字符串"。正则找的是"符合某类模式的字符串":不是"找 abc",而是"找连续三位数字""找以 http 开头的一串网址""找两个逗号之间的内容"。一旦你掌握它,文本筛选、抽取、清洗的效率会成倍提升。

它几乎无处不在:代码编辑器、命令行、编程语言(Python、JS)、甚至一些办公软件都支持正则。

二、几个最基础的符号

不用背全套,先懂最常用的几类:

  • 字符类\d 匹配数字,\w 匹配字母数字下划线,. 匹配任意字符(除换行)。
  • 量词* 表示"零个或多个",+ 表示"一个或多个",? 表示"零个或一个",{3} 表示"正好三个",{2,4} 表示"两到四个"。
  • 锚点^ 匹配开头,$ 匹配结尾,用来限定"整段必须怎样"。
  • 分组与或:用括号 ( ) 把部分圈起来,用 | 表示"或",比如 (cat|dog) 匹配猫或狗。
  • 转义:想匹配字面意义的 .* 这类特殊符号,前面加反斜杠 \

举例:^\d{6}$ 表示"从头到尾正好六位数字"——这正是很多验证码、邮编格式校验的写法。

三、常见用途

  • 校验:手机号、邮箱、身份证、密码强度,用一条正则快速判断格式对不对。
  • 抽取:从一段文本里抓出所有链接、所有日期、所有金额。
  • 替换:把全角括号统一成半角、把多余空格压成一个、给每行加序号。
  • 拆分:按逗号、空白或自定义分隔符把长串拆成数组。

掌握了"字符 + 量词 + 锚点"这三板斧,八成日常需求都能覆盖。

四、用工具少踩坑

正则写错太常见:少一个转义就匹配到不该匹配的,贪婪量词 .* 一口气吞掉半篇文章。与其在脑子里空转,不如边写边测。把你的文本和表达式贴进正则测试器,实时看到匹配高亮,哪里错了立刻改;需要批量改动时,用正则替换工具按规则一键替换,比手动快且不易漏。

五、别把正则当锤子

两句提醒:第一,极复杂的嵌套结构(比如匹配任意层级的 HTML 标签)不该用正则硬刚,交给专门的解析器更稳。第二,可读性很重要——三个月后你(或同事)再看那条长达三行、毫无注释的正则,大概率看不懂。关键处加注释,或拆成几步简单正则,比一条"神正则"更负责任。

小结

正则是一种"用模式描述文本"的紧凑语言,擅长查找、校验、抽取、替换。记住字符类、量词、锚点三块核心,再用测试工具边写边验,你就能把大量重复的文字活儿交给机器。它的威力在于精确而省力——前提是,别拿它去解决本不该用它的复杂问题。