
什么是正则表达式?
正则表达式(regex 或 regexp)是一个定义搜索模式的字符序列。正则表达式用于搜索、匹配、验证和转换文本。它们几乎被所有编程语言和许多文本编辑器支持。
尽管外表神秘,正则表达式遵循一致的规则。一旦你学会了语法,就可以在 Python、JavaScript、Java、Perl、Ruby 以及数十种其他语言中应用它。

基本正则表达式语法
字面字符
大多数字符匹配自身:cat 匹配字符串 "cat"。
元字符
特殊字符具有特殊含义,必须用反斜杠转义才能按字面匹配:
. ^ $ * + ? { } [ ] \\ | ( )
点号:任意字符
. 匹配除换行符外的任意单个字符:
c.t 匹配: cat, cot, cut, c4t, c.t
不匹配: cart (c 和 t 之间有两个字符)

字符类
[abc] 匹配任意单个字符 a、b 或 c:
[aeiou] 匹配任意元音
[a-z] 匹配任意小写字母
[A-Za-z0-9] 匹配任意字母数字字符
[^aeiou] 匹配任意非元音字符(^ 在 [] 内表示取反)
量词
控制前面的元素必须匹配的次数:
| 量词 | 含义 |
|---|---|
* |
零次或多次 |
+ |
一次或多次 |
? |
零次或一次(可选) |
{3} |
恰好 3 次 |
{2,5} |
2 到 5 次之间 |
{3,} |
3 次或更多 |
简写字符类
| 简写 | 等价于 | 含义 |
|---|---|---|
\d |
[0-9] |
任意数字 |
\D |
[^0-9] |
任意非数字 |
\w |
[a-zA-Z0-9_] |
任意单词字符 |
\W |
[^a-zA-Z0-9_] |
任意非单词字符 |
\s |
[ \t\n\r\f\v] |
任意空白字符 |
\S |
[^ \t\n\r\f\v] |
任意非空白字符 |
锚点
| 锚点 | 含义 |
|---|---|
^ |
字符串开头(多行模式下为行开头) |
$ |
字符串结尾(多行模式下为行结尾) |
\b |
单词边界 |
\B |
非单词边界 |

分组与选择
(abc) 捕获匹配的文本到一个分组中:
(\d{4})-(\d{2})-(\d{2}) 匹配并捕获日期,如 2025-06-15
| 提供选择(OR):
cat|dog 匹配 "cat" 或 "dog"
(cat|dog)s 匹配 "cats" 或 "dogs"
实用正则表达式示例
电子邮件验证(简化版):
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
URL 检测:
https?://[^\s<>"{}|\\^`\[\]]+
IP 地址(基本):
\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b
电话号码(美国):
\+?1?\s?(\d{3}[\s.-]?)?\d{3}[\s.-]?\d{4}
日期(YYYY-MM-DD):
\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])
十六进制颜色代码:
#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})
密码(8 位以上,包含大写字母、小写字母、数字):
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$
前瞻与后顾
前瞻匹配一个后面跟着特定模式的位置(但不包含该模式):
\d+(?= dollars) 匹配 "100 dollars" 中的 "100",但不匹配 "100 euros"
负前瞻匹配一个后面不跟着特定模式的位置:
\b\w+\b(?! are) 匹配后面不跟着 " are" 的单词
后顾匹配一个前面有特定模式的位置:
(?<=\$)\d+ 匹配 "$100" 中的 "100"
正则表达式标志
| 标志 | JavaScript | Python | 含义 |
|---|---|---|---|
| 全局 | g |
(不需要) | 查找所有匹配,而不仅仅是第一个 |
| 不区分大小写 | i |
re.IGNORECASE |
匹配时不区分大小写 |
| 多行 | m |
re.MULTILINE |
^ 和 $ 匹配行边界 |
| 点号匹配所有 | s |
re.DOTALL |
. 也匹配换行符 |
使用此工具
输入你的正则表达式和测试字符串,即可实时高亮显示匹配的部分。支持带标志(g, i, m, s)的 JavaScript 正则表达式语法。非常适合在代码中使用之前构建和调试模式。
-> 试试 正则表达式测试器