正则表达式学习路线 | 26 年最新零基础到精通一条龙(万人收藏⭐️)
编程导航学习网站:学编程、做项目、拿 Offer!
企业高频面试题库:开始刷题,面试遇原题!
精选简历模板大全:1 分钟搞定简历!
AI 资源导航网站:获取最新 AI 黑科技!
1 对 1 模拟面试:随时随地提升面试能力
开篇介绍
正则表达式(Regular Expression,简称 Regex 或 RE)是一种用于描述字符串匹配规则的强大工具,广泛应用于文本搜索、内容替换、格式验证、信息提取等场景。几乎所有编程语言都支持正则表达式,无论是 Python、JavaScript、Java、C++,还是命令行工具(grep、sed、awk),正则表达式都是不可或缺的技能。

为什么要学正则表达式?
在实际开发中,我们经常需要处理文本数据,如验证用户输入的手机号、邮箱格式,从日志文件中提取关键信息,批量替换代码中的特定模式等。使用正则表达式,一行代码就能完成原本需要几十行代码才能实现的功能,大大提升开发效率。
正则表达式的学习曲线相对陡峭,语法看起来像乱码,但只要掌握了基本规则和常用模式,就能在各种场景下得心应手地使用。
虽然已经到了 AI 时代,但正则表达式仍然是文本处理的利器,即使有了 AI 辅助工具来生成代码,理解正则表达式的原理也能让你更好地利用这些工具。
正则表达式的使用稍有不当,就有可能造成大 Bug。鱼皮自己的团队就出现过,血泪经验啊!
学习路线图

学习建议
1)边学边练:正则表达式的学习必须结合实践,建议使用在线测试工具,如 在线正则表达式测试,边学边测试。
2)从简单到复杂:不要一开始就学习复杂的正则表达式,先从简单的匹配开始,逐步增加复杂度。
3)理解而不是死记:正则表达式的语法虽然多,但都有其逻辑。要理解每个元字符的含义,而不是死记硬背正则表达式。
4)掌握常用模式:很多场景下的正则表达式是固定的(如邮箱、手机号、URL),可以直接使用现成的正则表达式模板,不需要从零编写。
5)善用 AI 工具:遇到复杂的正则表达式,可以让 AI 工具(如 ChatGPT、豆包等)帮你生成和解释。你可以在鱼皮的 AI 资源大全 中找到很多工具。

阶段 1:基础语法(1-3 天)
知识点
字符匹配【必学】:
- 普通字符:直接匹配,如
abc匹配 "abc" - 特殊字符(元字符):需要转义,如
\.匹配 "."
元字符【必学】:
.:匹配任意单个字符(换行符除外)\d:匹配数字,等价于[0-9]\D:匹配非数字\w:匹配字母、数字、下划线,等价于[A-Za-z0-9_]\W:匹配非字母数字下划线\s:匹配空白字符(空格、制表符、换行符等)\S:匹配非空白字符
数量限定符【必学】:
*:匹配前面的字符 0 次或多次+:匹配前面的字符 1 次或多次?:匹配前面的字符 0 次或 1 次{n}:匹配前面的字符恰好 n 次{n,}:匹配前面的字符至少 n 次{n,m}:匹配前面的字符至少 n 次,至多 m 次
位置匹配【必学】:
^:匹配字符串开始位置$:匹配字符串结束位置\b:匹配单词边界\B:匹配非单词边界
学习资源
- 廖雪峰 - 正则表达式:简洁易懂
- Regex Learn:交互式学习
在线工具
阶段 2:常用模式(1-3 天)
知识点
字符类【必学】:
[abc]:匹配 a、b 或 c[^abc]:匹配除 a、b、c 之外的字符[a-z]:匹配小写字母[A-Z]:匹配大写字母[0-9]:匹配数字
分组和引用【必学】:
(pattern):捕获分组(?:pattern):非捕获分组\1、\2:反向引用,引用第 1、2 个捕获分组
逻辑运算【必学】:
|:或运算,如cat|dog匹配 "cat" 或 "dog"
贪婪和非贪婪【建议学】:
- 贪婪模式(默认):尽可能多地匹配,如
.*会匹配尽可能多的字符 - 非贪婪模式:尽可能少地匹配,在量词后加
?,如.*?会匹配尽可能少的字符
常用正则表达式模板
不用记忆!简单过一遍就好了。
数字验证:
- 整数:
^-?\d+$ - 正整数:
^\d+$ - 浮点数:
^-?\d+\.\d+$
字符串验证:
- 手机号(11 位):
^1[3-9]\d{9}$ - 邮箱:
^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$ - URL:
^https?://[^\s]+$ - IPv4 地址:
^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$ - 身份证号(18 位):
^\d{17}[\dXx]$
日期验证:
- 日期(YYYY-MM-DD):
^\d{4}-\d{2}-\d{2}$ - 时间(HH:MM:SS):
^\d{2}:\d{2}:\d{2}$
中文字符:
- 中文字符:
[\u4e00-\u9fa5] - 中文字符串:
^[\u4e00-\u9fa5]+$
学习资源
- 常用正则表达式大全:OSChina 整理
阶段 3:高级特性(1-2 天,可选)
知识点
前瞻和后顾【可不学】:
(?=pattern):正向前瞻,匹配后面是 pattern 的位置(?!pattern):负向前瞻,匹配后面不是 pattern 的位置(?<=pattern):正向后顾,匹配前面是 pattern 的位置(?<!pattern):负向后顾,匹配前面不是 pattern 的位置
修饰符【建议学】:
i:忽略大小写g:全局匹配m:多行模式s:单行模式(. 匹配换行符)
命名分组【可不学】:
(?<name>pattern):命名捕获分组\k<name>:引用命名分组
学习建议
高级特性在日常开发中使用较少,可以先了解概念,需要时再深入学习。前瞻和后顾主要用于复杂的匹配场景,如密码强度验证(必须包含大小写字母、数字、特殊字符)。
阶段 4:实战应用(1-3 天)
这个阶段主要给大家分享几个例子,其实没必要专门学习,直接在自己的项目中实战就好了。
Python 中使用正则表达式
▼python复制代码import re # 匹配 text = "我的手机号是 13800138000" pattern = r"1[3-9]\d{9}" result = re.search(pattern, text) if result: print(result.group()) # 输出:13800138000 # 查找所有匹配 text = "手机号:13800138000,18912345678" results = re.findall(pattern, text) print(results) # 输出:['13800138000', '18912345678'] # 替换 text = "联系方式:13800138000" new_text = re.sub(r"1[3-9]\d{9}", "***", text) print(new_text) # 输出:联系方式:*** # 分割 text = "apple,banana;orange" result = re.split(r"[,;]", text) print(result) # 输出:['apple', 'banana', 'orange']
JavaScript 中使用正则表达式
▼javascript复制代码// 匹配 const text = "我的手机号是 13800138000"; const pattern = /1[3-9]\d{9}/; const result = text.match(pattern); console.log(result[0]); // 输出:13800138000 // 查找所有匹配 const pattern2 = /1[3-9]\d{9}/g; const results = text.match(pattern2); console.log(results); // 输出:['13800138000'] // 替换 const newText = text.replace(/1[3-9]\d{9}/g, "***"); console.log(newText); // 输出:我的手机号是 *** // 测试 const isValid = /1[3-9]\d{9}/.test("13800138000"); console.log(isValid); // 输出:true
实战案例
案例 1:验证邮箱格式
▼python复制代码import re def validate_email(email): pattern = r'^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$' return re.match(pattern, email) is not None print(validate_email("test@example.com")) # True print(validate_email("test@")) # False
案例 2:提取日志中的 IP 地址
▼python复制代码import re log = "2025-01-15 10:30:45 访问者IP: 192.168.1.100" pattern = r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}' ip = re.search(pattern, log) if ip: print(ip.group()) # 192.168.1.100
案例 3:脱敏手机号
▼python复制代码import re phone = "13800138000" masked = re.sub(r'(\d{3})\d{4}(\d{4})', r'\1****\2', phone) print(masked) # 138****8000
学习资源
- Python 正则表达式详解:完整教程
- 正则表达式实战案例:实际应用
常见问题
Q1:正则表达式为什么这么难?
A:正则表达式的语法比较抽象,看起来像乱码。但只要理解了每个元字符的含义,多练习几次就能掌握。建议从简单的正则开始,逐步增加复杂度。
Q2:如何调试正则表达式?
A:使用在线测试工具(如 Regex101)可以实时查看匹配结果,并且能看到每个部分的匹配过程。这对调试正则表达式非常有帮助。
Q3:正则表达式的性能如何优化?
A:1)避免使用过多的回溯(如嵌套的 * 和 +);2)使用非捕获分组 (?:) 代替捕获分组 ();3)将简单的字符串匹配放在前面;4)使用具体的字符类代替 .。
Q4:需要记住所有正则表达式吗?
A:不需要。常用的正则表达式模式(如邮箱、手机号、URL)可以直接使用现成的模板。遇到复杂的正则,可以查阅文档或使用 AI 工具生成。
持续学习资源
在线工具
- ⭐ Regex101:强大的正则测试工具,支持多种语言
- 在线正则表达式测试 - OSChina:提供常用正则模板
学习网站
- ⭐ Regex Learn:交互式学习,适合新手
- 正则表达式 30 分钟入门:经典教程
- 廖雪峰 - 正则表达式:Python 正则教程
正则表达式手册
- Python re 模块文档:官方文档
- JavaScript 正则表达式:MDN 文档
最后
正则表达式是文本处理的利器,虽然语法看起来复杂,但只要掌握了基本规则和常用模式,就能在各种场景下游刃有余。正则表达式不需要深入学习所有特性,掌握基础语法和常用模式就足够应对大部分开发场景。
在 AI 时代,正则表达式仍然是不可替代的工具。即使有了 AI 辅助,理解正则表达式的原理也能让你更好地利用这些工具,提升开发效率。
建议大家多使用在线测试工具进行练习,遇到复杂的正则可以让 AI 工具帮忙生成和解释。希望这份学习路线能够帮助大家快速掌握正则表达式。

程序员必备资源
1)程序员学习交流圈:极客教程、实战项目、求职宝典
2)程序员面试八股文:实习/校招/社招高频考点、企业真题解析
3)程序员写简历神器:专业模板、丰富例句、直通面试
4)AI 知识资源大全:前沿技术、最新 AI 资讯、提示词大全
5)1 对 1 模拟面试:实习/校招/社招面试拿 Offer 必备
