正则表达式是处理文本时绕不开的工具,不管是程序开发、数据分析,还是日常办公中批量替换文档内容,它都能派上大用场。可惜不少人第一次接触正则表达式,就被满屏的符号吓退了,什么点号、星号、方括号、花括号,看着像天书一样。实际上,正则表达式的核心概念并不多,常用的语法也就二十来个,只要按照正确的顺序学习,半天时间就能掌握八成以上的日常用法。这篇文章就是一份简明参考,把最基本的知识点和操作要点梳理清楚,帮你避开新手常见的坑。

正则表达式到底是什么
简单来说,正则表达式就是一套描述文本模式的语言。你平时搜索文件时可能用过通配符,比如用星号匹配任意文件名,正则表达式可以理解为通配符的加强版,它能表达的模式精细得多。比如你想从一堆日志里找出所有手机号,或者检查用户输入的邮箱格式对不对,用普通的字符串查找很难做到,但用正则表达式写一行模式就能搞定。
正则表达式的基本思路是:普通字符代表它自己,特殊字符(也叫元字符)代表某种规则。比如字母a就匹配字母a,而点号.匹配除换行符外的任意一个字符,星号*表示前面的内容重复零次或多次。把这些元素组合起来,就能描述出非常灵活的文本模式。比如a.*b表示以a开头、以b结尾、中间是任意内容的字符串。
需要说明的是,不同编程语言和工具对正则表达式的支持略有差异,但最核心的那部分语法是通用的。学会了基础规则,换到哪个环境里都能用,只是个别高级功能需要查一下对应文档。
必须掌握的基础语法要点
学正则表达式不要贪多,先把下面这几类最常用的语法吃透,日常工作中九成的场景都够用了。
字符匹配类
方括号表示字符集合,比如[abc]匹配a、b、c中的任意一个字符。方括号里还可以写范围,[a-z]匹配任意小写字母,[0-9]匹配任意数字。在方括号开头加个尖号表示取反,[^abc]就是匹配除了a、b、c以外的任意字符。另外还有一些预定义的简写:\d等价于[0-9],\w等价于[a-zA-Z0-9_],\s匹配空白字符(空格、制表符、换行等)。这些简写非常常用,建议直接背下来。
量词类
量词用来控制某个元素出现的次数。星号*表示零次或多次,加号+表示一次或多次,问号?表示零次或一次。如果想精确控制次数,用花括号:{3}表示恰好3次,{2,5}表示2到5次,{3,}表示至少3次。举个实际的例子,匹配11位手机号可以写成1\d{10},也就是数字1后面跟10个数字。
边界与位置类
尖号^匹配字符串的开头,美元符$匹配字符串的结尾。\b匹配单词边界,也就是字母数字和空白字符之间的位置。比如你想匹配cat这个完整的单词,而不是匹配category里的前三个字母,就要写成\bcat\b。边界匹配在格式校验时特别重要,比如校验一整行是否为纯数字,写成^\d+$就比单纯写\d严谨得多。
分组、捕获与替换
小括号在正则表达式里承担分组的功能。一方面它可以把多个字符当成一个整体来加量词,比如(ab)+匹配ab、abab这样的重复;另一方面它还能捕获匹配到的内容,供后续引用。
捕获组最常见的用途是在替换时反向引用。比如你有一批日期写成2024-01-15的格式,想改成15/01/2024,可以用(\d{4})-(\d{2})-(\d{2})来匹配,替换时写成$3/$2/$1(部分工具用\3\2\1的写法)。三个小括号分别捕获了年、月、日,替换时按需要的顺序取出来就行。这个技巧在批量处理文本时极其高效。
还有一种非捕获分组写作(?:...),它只起分组作用但不捕获内容,在你不需要引用某个分组时使用,能让表达式更简洁,匹配效率也略高一些。
新手最常踩的坑
贪婪匹配与懒惰匹配
这是新手最容易困惑的一点。默认情况下,星号和加号都是贪婪的,会尽可能多地匹配字符。比如用
.*
去匹配一段HTML文本,如果文本里有多个p标签,它会从第一个一直匹配到最后一个
,把中间所有内容都吞进去。解决办法是在量词后面加个问号,写成.*?,这样就变成懒惰匹配,只匹配到最近的结束标签为止。遇到匹配结果比我预期长的问题,第一时间就该想到是不是贪婪匹配在作怪。特殊字符忘记转义
像点号、星号、加号、问号、小括号、方括号这些元字符,如果你想匹配它们的字面意思,必须在前面加反斜杠转义。比如匹配网址里的点就要写\.,匹配小括号要写\(和\)。常见错误是直接写3.14去匹配版本号,结果把3a14、3-14这类字符串也匹配上了,因为点号匹配了任意字符。另外在不同编程语言里写正则时,反斜杠本身可能还需要再转义一次,这也是需要留意的地方。
中文匹配问题
匹配中文时不能直接用\w,因为\w默认不含中文字符。通用的做法是直接把中文写进字符范围,或者使用Unicode属性写法。不同语言的具体支持情况不一样,遇到问题时查一下所用环境的文档最稳妥。
常见疑问解答
正则表达式能校验邮箱、身份证这些复杂格式吗?
可以,但没必要追求完美。比如校验邮箱,写一个检查基本结构的表达式就够了:^\w+@\w+\.\w+$。网传的那些几百字符的完美邮箱正则,实际价值不大,因为邮箱格式的规范本身就很复杂,严格的校验最终还是得靠发送验证邮件来确认。原则是够用就好,别在边缘案例上钻牛角尖。
表达式写完没匹配到任何结果,怎么排查?
建议从简单到复杂逐步排查。先把表达式拆成几段,逐段测试,看是哪一段出了问题。常见原因包括:大小写没考虑(可以加上忽略大小写的标志)、多了或少了转义符、量词写错、边界条件太严格等。现在很多在线正则测试工具都能实时高亮匹配结果,把表达式和样例文本贴进去测试,比盲猜快得多。
有没有必要背下所有语法?
完全没有必要。常用的那二十多个语法元素用熟之后,剩下的冷门功能等用到时再查手册就行。正则表达式更像一门工具而不是知识储备,关键在于多动手练习。可以找一些日常任务来练手,比如清理文本中的多余空格、提取网页里的链接、批量重命名文件等,练上几次手感就来了。
学习路线建议
入门正则表达式,推荐按这个顺序推进:先掌握字符匹配和量词,能写出简单的匹配模式;再学边界匹配和分组捕获,能处理替换类任务;然后理解贪婪与懒惰的区别,解决匹配范围不准确的困扰;最后按需了解前后查找、命名分组等进阶功能。每学一个知识点就立刻找实例练习,比一口气看完整本手册效果好得多。
正则表达式说到底是个熟能生巧的工具,第一次写可能要反复调试,写得多了自然会形成直觉。把这份简明参考收藏好,遇到具体问题时回来查对应的语法,坚持一段时间,你会发现处理文本的效率提升了一大截。