在日常开发中,我们经常需要处理字符串,比如验证邮箱、手机号、提取数据、替换内容等。这时候,正则表达式(Regular Expression, 简称 Regex) 就是一个非常强大的工具。
本文将带你从零了解正则表达式的基本语法、常见用法,并配合示例逐步讲解其强大功能。
一、什么是正则表达式?
正则表达式是一种用于匹配字符串中某些内容的模式(Pattern)。它像一种精密的“搜索规则”,可以快速在文本中查找、验证或替换符合要求的部分。
二、正则表达式的基础语法
1. 字面字符
最简单的正则就是直接匹配具体字符:
hello # 匹配“hello”字符串
123 # 匹配“123”
2. 元字符(Metacharacters)
元字符有特殊意义,用于定义复杂规则:
字符 | 含义 | 示例 |
---|---|---|
. |
匹配任意一个字符(除换行) | a.b 可匹配 acb |
^ |
匹配开头 | ^abc 匹配以 abc 开头 |
$ |
匹配结尾 | abc$ 匹配以 abc 结尾 |
* |
匹配前面的字符 0 次或多次 | ab*c 匹配 ac , abc , abbc |
+ |
匹配前面的字符 1 次或多次 | ab+c 匹配 abc , abbc |
? |
匹配 0 或 1 次 | ab?c 匹配 ac 或 abc |
[] |
匹配括号中任意一个字符 | [abc] 匹配 a , b , 或 c |
` | ` | 或(或逻辑) |
() |
分组与捕获 | (abc)+ 匹配重复的 abc |
3. 常见转义字符
表达式 | 含义 | 示例 |
---|---|---|
\d |
数字,等价于 [0-9] |
\d+ 匹配一个或多个数字 |
\w |
单词字符 [a-zA-Z0-9_] |
\w+ 匹配单词 |
\s |
空白字符(空格、Tab) | \s+ 匹配空格 |
\b |
单词边界 | \bword\b 精确匹配 word |
\D |
非数字字符 | |
\W |
非单词字符 | |
\S |
非空白字符 | |
\\ |
匹配反斜杠 \ |
三、常见正则表达式例子
1. 验证邮箱地址
^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$
^
:表示匹配字符串的开头(确保邮箱前没有其他字符)。[a-zA-Z0-9_.+-]+
- 用户名部分:匹配邮箱
@
前的部分。 - 允许的字符: 字母(
a-z, A-Z
) 、数字(0-9
)、特殊字符(_ . + -
) +
表示至少出现1次(不能为空)。
- 用户名部分:匹配邮箱
@
:中间的@
符号。[a-zA-Z0-9-]+
- 域名部分:如
gmail
、yahoo
等。 - 允许的字符:字母、数字、连字符
-
(但不能以-
开头或结尾,此处正则未严格限制)。
- 域名部分:如
\.
:匹配一个点号(.
),需转义为\.
(因为.
在正则中默认匹配任意字符)。[a-zA-Z0-9-.]+
- 顶级域名(TLD):如
com
、co.uk
等。 - 允许的字符:字母、数字、点号
.
和连字符-
(可支持多级域名,如ac.jp
)。
- 顶级域名(TLD):如
$
:表示匹配字符串的结尾(确保邮箱后没有其他字符)。
能匹配的示例:
user.name+123@gmail.com
abc@example.co.jp
test-email@sub.domain.org
2. 验证手机号(中国)
^1[3-9]\d{9}$
1
开头- 第二位是
3-9
- 接着是 9 位数字
3. 匹配 HTML 标签
<[^>]+>
匹配形如 <div>
或 <img src="x.jpg">
的 HTML 标签
4. 提取日期(YYYY-MM-DD)
\d{4}-\d{2}-\d{2}
匹配形如 2025-06-11
的日期格式
5. 匹配 IPv4 地址
\b(?:\d{1,3}\.){3}\d{1,3}\b
匹配像 192.168.1.1
这样的 IP 地址
四、正则在编程语言中的使用示例
Python 示例:
import re
text = "My email is test@example.com"
pattern = r'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+'
match = re.search(pattern, text)
if match:
print("Found:", match.group())
JavaScript 示例:
const text = "Today is 2025-06-11"
const match = text.match(/\d{4}-\d{2}-\d{2}/)
console.log(match[0]) // 输出:2025-06-11
五、正则调试与测试工具推荐
- Regex101(支持解释和测试)
- RegExr(界面友好,支持语法提示)
- VS Code + 正则搜索:查找 / 替换神器
- Python 的
re
模块、JavaScript 的RegExp
对象等
六、正则表达式进阶小技巧
- 使用 非捕获分组:
(?:...)
,不存储匹配结果 - 使用 懒惰匹配:
*?
、+?
,防止贪婪匹配太多内容 - 使用 命名分组(如 Python):
(?P<name>...)
- 避免过于复杂的正则,适当使用普通字符串操作更清晰
七、常见坑与注意事项
- 正则容易写出“看得懂但不好维护”的代码,建议搭配注释或分组。
- 某些语言或平台(如 JavaScript)对 Unicode 字符处理不一致,要小心中文匹配。
- 避免用正则解析复杂的 HTML/XML(推荐用解析器如 BeautifulSoup)。
八、总结
正则表达式是一种强大的文本处理工具,掌握它可以极大提高处理文本数据的效率。虽然刚开始有些复杂,但随着练习和实际使用,你会越来越得心应手。
📌 建议从以下几种常用场景入手练习:
- 验证用户输入(邮箱、手机号、密码)
- 批量替换文本内容
- 提取网页数据或日志信息
- 匹配文件名、路径、日期等格式
📚 推荐阅读