ToolHub
View All Posts

每个开发者都应该掌握的正则表达式模式

正则表达式(regex)是开发者工具箱中最强大的工具之一。它们允许你用简洁的模式来搜索、验证和转换文本,而这些操作如果用过程式代码可能需要数十行。虽然正则表达式语法乍看之下可能晦涩难懂,但掌握一组核心模式就能覆盖绝大多数实际用例。本指南介绍了你将反复使用的正则表达式模式,并详细解释每个模式的工作原理。

正则表达式基础回顾

在深入具体模式之前,这里快速回顾一下构成所有正则表达式模式基础元字符:

元字符含义示例
.任意单个字符a.c 匹配 abc、a1c、a c
*前一个字符零次或多次ab*c 匹配 ac、abc、abbc
+前一个字符一次或多次ab+c 匹配 abc、abbc
?前一个字符零次或一次colou?r 匹配 color、colour
^字符串开头^Hello 匹配开头的 Hello
$字符串结尾world$ 匹配结尾的 world
[]字符类[aeiou] 匹配任意元音字母
()捕获组(ab)+ 匹配 ab、abab
|交替(或)cat|dog 匹配 cat 或 dog
\d数字 [0-9]\d{3} 匹配 123
\w单词字符 [a-zA-Z0-9_]\w+ 匹配 hello_123
\s空白字符a\sb 匹配 a b

1. 邮箱验证

基本邮箱模式

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

此模式验证邮箱地址的基本结构:@ 前有一个或多个允许的字符,后跟至少包含一个点号的域名,以及两个或更多字母的顶级域名。它能捕获大多数无效格式,同时允许合法地址通过。

匹配:user@example.com、john.doe+tag@company.co.uk

不匹配:user@、@example.com、user@.com

重要提示:没有正则表达式能完美验证 RFC 5322 中所有有效的电子邮件地址。使用此模式进行基本格式检查,然后通过发送确认邮件来验证地址。对于生产应用,将正则验证与域名验证结合使用。

2. URL 验证

HTTP/HTTPS URL 模式

^https?:\/\/(www\.)?[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(\/[^\s]*)?$

此模式匹配带有可选 www 前缀的 HTTP 和 HTTPS URL,包含域名和可选路径。s? 使 https 中的 "s" 变为可选,(www\.)? 使 www 前缀变为可选。路径段 (\/[^\s]*)? 允许域名后出现除空白字符外的任何字符。

匹配:https://example.com、http://www.example.com/path/to/page

不匹配:ftp://example.com、example.com(无协议)

3. 电话号码验证

国际电话号码

^\+?[1-9]\d{1,14}$

此模式遵循 E.164 国际电话号码格式。它允许可选的 + 前缀,要求第一位数字为 1-9(无前导零),总共最多允许 15 位数字。这是国际上存储和验证电话号码最可靠的格式。

匹配:+14155552671、442071838750

不匹配:+01xxxxxxxxx、123

4. 密码强度

强密码模式

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$

此模式强制执行强密码策略:至少 8 个字符,包含至少一个小写字母、一个大写字母、一个数字和一个特殊字符。(?=.*[...]) 语法使用正向前瞻来检查每种字符类型的存在,而不消耗字符。

匹配:MyP@ss1word、Str0ng!Pass

不匹配:password、Password1、P@ss

5. IP 地址验证

IPv4 地址

^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$

此模式验证 IPv4 地址并进行正确的范围检查。每个八位组必须在 0 到 255 之间。该模式使用交替匹配:250-255(25[0-5])、200-249(2[0-4]\d)或 0-199([01]?\d\d?)。这在三个点号后重复三次,然后最后一次用于最终的八位组。

匹配:192.168.1.1、10.0.0.1、255.255.255.0

不匹配:256.1.1.1、192.168.1、192.168.1.1.1

6. 日期格式验证

YYYY-MM-DD (ISO 8601)

^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$

此模式验证 ISO 8601 格式(YYYY-MM-DD)的日期。它检查四位数的年份、01-12 之间的月份和 01-31 之间的日期。请注意,此模式验证格式但不验证日期的逻辑有效性(例如,它允许 2026-02-31)。要进行完整验证,请解析日期并以编程方式检查。

匹配:2026-05-20、2025-01-01、2024-12-31

不匹配:2026-5-20、2026-13-01、26-05-20

7. 十六进制颜色代码

CSS 十六进制颜色

^#(?:[0-9a-fA-F]{3}){1,2}$

此模式匹配 CSS 十六进制颜色代码,包括 3 位简写(#fff)和 6 位完整形式(#ffffff)。{1,2} 量词允许 3 位十六进制数字组的 1 次或 2 次重复,同时支持两种格式。

匹配:#fff、#FF5733、#1e293b

不匹配:fff、#ff、#1234567

8. Slug / URL 安全字符串

URL Slug 模式

^[a-z0-9]+(?:-[a-z0-9]+)*$

此模式验证 URL slug:以连字符为分隔符的小写字母数字字符串。它确保没有前导或尾随连字符,也没有连续连字符。这种格式对 SEO 友好,可安全用于 URL、文件名和标识符。

匹配:my-blog-post、regex-patterns-guide、tool123

不匹配:My-Post、-slug、slug-、my--post

9. 信用卡号

通用信用卡模式

^(?:4\d{12}(?:\d{3})?|5[1-5]\d{14}|3[47]\d{13}|6(?:011|5\d{2})\d{12})$

此模式验证主要信用卡号:Visa(以 4 开头,13 或 16 位)、Mastercard(以 51-55 开头,16 位)、American Express(以 34 或 37 开头,15 位)和 Discover(以 6011 或 65 开头,16 位)。将此与 Luhn 算法结合使用以完成完整验证。

10. HTML 标签匹配

HTML 标签提取

<([a-z][a-z0-9]*)\b[^>]*>(.*?)<\/\1>

此模式匹配带有内容的开闭 HTML 标签。第一个捕获组 ([a-z][a-z0-9]*) 捕获标签名,反向引用 \1 确保闭标签与开标签匹配。(.*?) 使用懒惰匹配捕获标签之间的内容,以获得最短匹配。

编写更好正则表达式的技巧

想要交互式测试这些正则表达式模式?试试我们免费的正则表达式测试工具,支持实时匹配、捕获组可视化和模式解释。

测试正则表达式

常见问题

什么是正则表达式模式?

正则表达式模式是定义搜索模式的字符序列。它用于字符串匹配、验证、搜索替换操作和文本解析。正则表达式模式使用 .、*、+、?、[]、() 和 {} 等特殊元字符来定义灵活的匹配规则。

我应该用正则表达式验证邮箱吗?

使用正则表达式进行基本的邮箱格式验证(检查 @ 符号、域名结构),但不要试图仅用正则表达式完全验证邮箱地址。邮箱规范(RFC 5322)极其复杂,没有正则表达式能完美验证所有有效地址。在生产环境中,应将基本正则验证与实际邮箱验证(发送确认链接)结合使用。

贪婪量词和懒惰量词有什么区别?

贪婪量词(*、+)尽可能多地匹配文本,而懒惰量词(*?、+?)尽可能少地匹配文本。例如,应用于 'aabb' 时,贪婪模式 a.*b 匹配 'aabb'(整个字符串),而懒惰模式 a.*?b 仅匹配 'aab'(最短匹配)。

如何测试正则表达式模式?

使用在线正则表达式测试工具(如 ToolHub 正则表达式测试器)交互式地测试模式。这些工具实时高亮匹配结果,显示捕获组,并解释模式各部分的功能。

不同编程语言的正则表达式是否相同?

大多数正则表达式语法在语言间是共享的,但高级特性存在差异。JavaScript 在旧版引擎中不支持回顾断言,Python 使用与 JavaScript 不同的命名组语法,PCRE(PHP)比大多数其他引擎支持更多特性。务必在目标语言中测试模式。