正则表达式入门:最先要学的 10 个正则
刚接触正则表达式?从这里开始。十个小正则,每个都是一块积木:普通文本、点、字符类、\d、量词、锚点、分支、分组、转义和单词边界。每个示例都可以实时编辑,改一改就能看到变化。

· 阅读约 7 分钟
/^c.t$/
抓住
- cat
- cot
- cut
- c9t
放过
- ct
- coat
- scat
- cats
正则表达式(regex)是一小段用来描述文本的规则。“三个数字。”“以大写字母开头的单词。”“任何以 .pdf 结尾的内容。”代码编辑器、电子表格、搜索工具和所有编程语言都能理解它。
它看起来晦涩,是因为每个字符都很短,而不是因为概念很难。十个基本构件就能覆盖人们日常使用的大部分内容,本文会逐一介绍。每个示例都可以实时编辑:修改正则,各行会随之更新。
01普通文本匹配它自己
大多数字符就代表它们自己。正则 cat 会在任何位置找到连续的 c、a、t 三个字母:
匹配默认区分大小写,所以 CAT 不算。
02点:任意一个字符
. 恰好匹配一个字符,不管是什么字符:
ct 不匹配,因为 c 和 t 之间什么都没有。coat 不匹配,因为中间有两个字符。
03字符集合:[ ]
方括号表示“这个集合中的一个字符”:
方括号内的连字符表示范围:[a-z] 是任意小写字母,[0-9] 是任意数字。关于集合的更多内容,见字符类。
04简写:\d、\w、\s
有些集合有简短的名字。\d 是一个数字,\w 是一个单词字符(字母、数字或下划线),\s 是一个空格或其他空白字符:
05重复多少次:+ * ? {n}
跟在某个内容后面的量词表示它重复多少次:
| 量词 | 含义 |
|---|---|
+ |
一次或多次 |
* |
零次或多次 |
? |
零次或一次(可选) |
{3} |
恰好 3 次 |
{2,4} |
2 到 4 次 |
06开头和结尾:^ 和 $
^ 表示“文本的开头”,$ 表示“结尾”。当整段文本都必须匹配、而不只是其中一部分时,两个都要用:
括号让 ^ 和 $ 同时作用于两个分支。
08分组:( )
括号把几个字符组合在一起,让量词作用于它们全体:
09转义特殊字符:\
. ? + * ( 和 $ 这类字符有特殊含义。要按字面匹配它们,就在前面加一个反斜杠:
10完整单词:\b
\b 标记单词的边缘。用 \b … \b 把一个单词包起来,就只匹配独立的这个单词,而不会匹配更长单词里的它:
11组合起来
一个美式电话号码,比如 555-0199 或 555 0199:三个数字,一个可选的连字符或空格,四个数字,除此之外没有别的:
这就是第 3、4、5、6 个正则在协同工作。大多数实际使用的正则,都只是这些构件的组合。
12试一试
你的第一场狩猎:抓住怪物,放过无辜者。
抓住以 ing 结尾的单词。
目标 · 抓住 0/5
- running目标
- sing目标
- thing目标
- bring目标
- king目标
无辜词 · 误抓 0
- ingot无辜
- singer无辜
- angle无辜
- kings无辜
- ring a bell无辜
输入正则——棋盘会实时更新。