Skip to content

正则表达式入门教程

Written by gemini-3.1-pro-preview

不用担心它看起来像一堆乱码,其实它就像拼乐高积木,只要掌握了基础零件,你就能拼出无穷的玩法。


第一部分:什么是正则表达式?

想象一下,你在一个几万字的文档里找一个叫“张三”的人,你可以直接按 Ctrl+F 搜索“张三”。这很简单。 但是,如果你要找的是**“所有的手机号码”**呢?手机号有无数种组合,你不可能一个一个去搜。

这时候就需要正则表达式出场了。它是一种**“规则语言”**,你可以用它告诉电脑:“帮我找出一串连续的11位数字,并且是以1开头的。”


第二部分:认识基础“魔法符号”

正则表达式由普通字符(比如字母 a, 数字 1)和特殊符号(也叫元字符,有魔法效果)组成。我们先来认识几个最常用的“魔法符号”:

1. 占位符(代表某一种字符)

  • \d:代表任意一个数字(digit)。比如 \d\d\d 可以匹配 "123" 或 "999"。
  • \w:代表任意一个字母、数字或下划线(word)。比如 \w 可以匹配 "A", "b", "5", "_"。
  • \s:代表任意一个空白符(包括空格、回车、Tab等)。
  • . (英文句号):代表除了换行符以外的任意一个字符。它是超级万能牌。

(💡小提示:把上面的字母大写,意思就完全相反。比如 \D 代表不是数字的字符。)

2. 量词(规定出现了多少次)

如果我们要匹配11位手机号,写11个 \d 太傻了。我们可以用量词:

  • *:出现 0 次或多次(可以没有,也可以有无数个)。
  • +:出现 1 次或多次(至少得有一个)。
  • ?:出现 0 次或 1 次(代表它是可选的,有或没有都行)。
  • {n}:精准出现 n 次。比如 \d{11} 就代表正好11位数字(完美的手机号匹配!)。
  • {n,m}:出现 n 到 m 次。比如 \d{3,4} 可以匹配3到4位数字(比如区号 "010" 或 "0592")。

3. 字符组(多选一)

  • [ ]:方括号里的字符,只要命中一个就算数。
    • [abc]:匹配 "a" 或 "b" 或 "c"。
    • [0-9]:等同于 \d
    • [a-zA-Z]:匹配所有的英文字母。

第三部分:小试牛刀(匹配实战)

我们来做个小练习,匹配一个格式为 年-月-日 的日期,比如 2023-10-25

  • 年份是4个数字:\d{4}
  • 中间有个横杠:-
  • 月份是2个数字:\d{2}
  • 中间有个横杠:-
  • 日子是2个数字:\d{2}

组合起来!日期的正则表达式就是:\d{4}-\d{2}-\d{2}


第四部分:进阶魔法 —— 提取与替换($1, $2 登场)

这是正则表达式最强大、最神奇的功能!在很多文本编辑器(如 VS Code, Notepad++)或者编程语言中,我们不仅要找到文本,还要改变它的格式。

1. 括号的作用:打包装箱(捕获组)

在正则里,小括号 ( ) 的作用是把匹配到的内容单独打包,装进带编号的箱子里,留着后面用。

我们拿刚才的日期 2023-10-25 举例。我们给刚才的正则加上括号: (\d{4})-(\d{2})-(\d{2})

电脑不仅会匹配出 "2023-10-25",还会偷偷做以下操作:

  • 把第一个括号匹配到的 2023 装进 1号箱
  • 把第二个括号匹配到的 10 装进 2号箱
  • 把第三个括号匹配到的 25 装进 3号箱

2. 召唤箱子:$1, $2, $3

在“替换(Replace)”操作中,我们可以用 $1 来代表1号箱里的内容,$2 代表2号箱,以此类推。

实战任务:把 2023-10-25 改成美国习惯的日期格式 10/25/2023 (月/日/年)。

  • 搜索规则 (Regex): (\d{4})-(\d{2})-(\d{2})
  • 替换为 (Replace): $2/$3/$1

见证奇迹的时刻: 电脑会读取 $2(也就是10),接着写一个 /,然后读取 $3(也就是25),再写一个 /,最后读取 $1(也就是2023)。 瞬间,所有的日期都被完美转换了!

3. 再来个例子:中英文人名翻转

假设你有一堆名字:Ming Yao (姚明), San Zhang (张三)。 你想把它们统一改成:Yao, Ming , Zhang, San

  • 分析:名字包含两个单词,中间是一个空格。单词可以用 \w+ (一个或多个字母)来匹配。
  • 搜索规则: (\w+)\s(\w+)
    • 第一个 (\w+) 会抓取 First name(如 Ming),装进 1号箱。
    • 中间的 \s 匹配空格。
    • 第二个 (\w+) 会抓取 Last name(如 Yao),装进 2号箱。
  • 替换为: $2, $1

结果:Ming Yao 瞬间变成了 Yao, Ming


第五部分:避坑小指南(转义字符)

如果我就是想匹配文本里的一个实实在在的“句号(.)”或者“加号(+)”怎么办?因为它们被正则征用为魔法符号了。 答案是:在前面加一个反斜杠 \ 打回原形(这叫转义)。

  • 匹配普通的句号:\.
  • 匹配普通的加号:\+
  • 匹配普通的括号:\(\)

比如匹配带小数点的金额 9.99,正则应该是:\d\.\d{2}


更多

掌握以上基础语法基本上已经够用了

如果你想要学习更多,推荐前往 菜鸟教程 或直接搜索 正则表达式 阅读更多进阶教程