跳转到主内容
教程

正则表达式入门:一份实用的生存指南

· 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”。

常见陷阱

  1. 贪婪 vs 懒惰* 默认贪婪。<.*> 会吃掉整行;用 <.*?> 才会一个个匹配。
  2. 要转义.([ 这些特殊字符要写成 \.\(\[
  3. 正则不擅长解析 HTML — 别试。等真要做的时候用专门的解析器。

练习场

读正则最好的方式不是看教程,而是在自己的代码里用它。从一行日志解析开始,下一个项目里你会自然而然地写更复杂的模式。

如果想在线练习,试试我们的 正则测试工具 —— 实时高亮匹配 + 捕获组可视化。