1057 字
5 分钟
正则表达式基础:如何匹配你想要的字符串
本文只讲解正则表达式本身的语法规则,不涉及任何编程语言(如 Python、JavaScript)。你学到的规则可在任何支持正则的工具中使用(如文本编辑器、grep、在线测试器等)。
目录
- 什么是正则表达式?
- 字面量匹配:精确查找固定文本
- 通配符:匹配任意字符
- 数字、字母、空白:预定义字符类
- 重复匹配:量词
- 自定义字符集:[]
- 分组与选择:() 和 |
- 位置锚定:行首、行尾、单词边界
- 常用模式示例
- 学习建议
1. 什么是正则表达式?
正则表达式(Regular Expression)是一种描述字符串模式的规则语言。
它的作用是:
- 查找符合某种模式的文本
- 验证文本是否符合格式(如邮箱、手机号)
- 提取文本中的特定部分
你只需要写出一个“模式”,它就能告诉你:哪些字符串匹配这个模式。
2. 字面量匹配:精确查找固定文本
最简单的正则就是直接写你要找的文本。
| 正则 | 匹配的字符串 |
|---|---|
hello | "hello" |
123 | "123" |
Error: | "Error:" |
✅ 特点:区分大小写(除非工具设置忽略大小写)
3. 通配符:匹配任意字符
.(点号):匹配任意一个字符(通常不包括换行符)
| 正则 | 匹配示例 |
|---|---|
a.c | "abc", "a2c", "a c" |
... | 任意三个字符,如 "cat", "123" |
IMPORTANT注意:
.不匹配换行符(\n),具体行为取决于工具设置。
4. 数字、字母、空白:预定义字符类
为方便使用,正则提供了一些预定义的字符集合:
| 模式 | 含义 | 等价写法 |
|---|---|---|
\d | 任意数字 | [0-9] |
\D | 任意非数字 | [^0-9] |
\w | 单词字符(字母、数字、下划线) | [a-zA-Z0-9_] |
\W | 非单词字符 | [^a-zA-Z0-9_] |
\s | 空白字符(空格、制表符、换行等) | — |
\S | 非空白字符 | — |
| 正则 | 匹配示例 |
|---|---|
\d\d | "12", "99" |
\w+ | "user123", "hello" |
a\sb | "a b", "a b"(中间是空格或制表符) |
5. 重复匹配:量词
量词用于指定前面的模式重复多少次:
| 量词 | 含义 |
|---|---|
* | 0 次或多次 |
+ | 1 次或多次 |
? | 0 次或 1 次(可选) |
{n} | 恰好 n 次 |
{n,} | 至少 n 次 |
{n,m} | n 到 m 次 |
| 正则 | 匹配示例 |
|---|---|
ab* | "a", "ab", "abbb" |
ab+ | "ab", "abbb"(不能只有 "a") |
colou?r | "color", "colour" |
\d{4} | "2025", "0000" |
\d{2,4} | "12", "123", "1234" |
TIP默认是“贪婪匹配”:尽可能多地匹配。如
a.*b在"a1b2b"中匹配整个字符串。
6. 自定义字符集:[]
用方括号 [] 定义你自己的字符集合:
| 模式 | 含义 |
|---|---|
[abc] | 匹配 a、b 或 c |
[a-z] | 任意小写字母 |
[A-Z] | 任意大写字母 |
[0-9] | 任意数字(等价于 \d) |
[a-zA-Z0-9] | 字母或数字 |
[^0-9] | 非数字(^ 在开头表示“取反”) |
| 正则 | 匹配示例 |
|---|---|
[aeiou] | 任意元音字母 |
gr[ae]y | "gray", "grey" |
[^,] | 任意非逗号字符 |
7. 分组与选择:() 和 |
():将多个字符分组,可对整个组使用量词|:表示“或”关系
| 正则 | 匹配示例 |
|---|---|
(ab)+ | "ab", "abab" |
cat|dog | "cat", "dog" |
(Mr|Mrs|Ms)\. \w+ | "Mr. Smith", "Ms. Lee" |
NOTE分组在提取信息时非常有用(如提取日期中的年、月、日)。
8. 位置锚定:行首、行尾、单词边界
这些符号不匹配字符,而是匹配位置:
| 模式 | 含义 |
|---|---|
^ | 字符串开头 |
$ | 字符串结尾 |
\b | 单词边界(单词与非单词字符之间) |
\B | 非单词边界 |
| 正则 | 匹配示例 |
|---|---|
^Hello | 字符串以 “Hello” 开头 |
world$ | 字符串以 “world” 结尾 |
^\d+$ | 整个字符串全是数字 |
\bcat\b | 匹配独立的单词 “cat”,不匹配 “catch” 中的 “cat” |
9. 常用模式示例
| 需求 | 正则表达式 |
|---|---|
| 4 位年份 | \d{4} |
| 电话号码(简单) | \d{3}-\d{4} 或 \d{3}\d{4} |
| 邮箱(简化版) | \w+@\w+\.\w+ |
| IP 地址(简化) | \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} |
| 十六进制颜色 | #[0-9A-Fa-f]{6} |
| 整数(可带正负) | -?\d+ |
| 小数 | -?\d+\.\d+ |
WARNING注意:真实场景中(如邮箱、IP),这些简化版可能不够严谨,但适合入门理解。
10. 学习建议
- 使用在线工具练习:
- regex101.com(推荐,带解释)
- regexr.com
- 从简单开始:先写能工作的正则,再逐步优化
- 警惕过度复杂:正则不是万能的,复杂结构(如 HTML)应使用专用解析器
- 注意工具差异:不同软件对正则的支持略有不同(如是否支持
\b)
掌握这些基础,你就能写出大多数日常所需的正则表达式! 🔍
正则表达式基础:如何匹配你想要的字符串
https://fuwari.vercel.app/posts/material/regex-tutorial/