正则表达式入门:一份实用的生存指南
· 8 分钟阅读
正则表达式看起来就像有人把键盘砸了一遍。但一旦你掌握了语法,它会成为开发者工具箱里最有用的工具之一。
本文用真实例子带你入门,不讲废话。
字符:基础砖块
正则由”匹配某个东西”的指令组成:
a— 字符 a\d— 任何数字(等价于[0-9])\w— 任何字母、数字或下划线\s— 任何空白字符(空格、Tab、换行).— 任何字符(除了换行)
把它们组合起来,就有了像 \d\d\d 这种”匹配三个数字”的模式。
数量:单个还不够
光匹配单个字符没什么用,我们想匹配”一段”。
*— 0 次或多次+— 1 次或多次?— 0 次或 1 次{n}— 恰好 n 次{n,m}— n 到 m 次
例如 \d{3}-\d{4} 匹配 555-1234 这种电话号码。
锚点:把模式钉在位置上
^— 字符串开头$— 字符串结尾\b— 单词边界
^Error: 匹配以 “Error:” 开头的行 —— 在日志里捞错时超好用。
实战例子
校验邮箱(够用版)
^[\w.+-]+@[\w-]+\.[\w.-]+$
不完美,但能挡掉 99% 的拼错。
提取 URL 中的域名
https?://([^/]+)
捕获组 ([^/]+) 抓的就是域名。
把空格规范化成单个
\s+
替换为单个空格。
校验 ISO 日期
^\d{4}-\d{2}-\d{2}$
只验格式,不验有效性(2026-13-99 也会通过)—— 那是另一篇文章的事。
标志:开关
g— 全局匹配(不止第一个)i— 忽略大小写m— 多行模式s— 点号也匹配换行
/error/gi 在整段文本里不分大小写地找所有 “error”。
常见陷阱
- 贪婪 vs 懒惰 —
*默认贪婪。<.*>会吃掉整行;用<.*?>才会一个个匹配。 - 要转义 —
.、(、[这些特殊字符要写成\.、\(、\[ - 正则不擅长解析 HTML — 别试。等真要做的时候用专门的解析器。
练习场
读正则最好的方式不是看教程,而是在自己的代码里用它。从一行日志解析开始,下一个项目里你会自然而然地写更复杂的模式。
如果想在线练习,试试我们的 正则测试工具 —— 实时高亮匹配 + 捕获组可视化。