编程导航学习网站:学编程、做项目、拿 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 资源大全 中找到很多工具。

字符匹配【必学】:
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:匹配非单词边界字符类【必学】:
[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+$字符串验证:
^1[3-9]\d{9}$^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$^https?://[^\s]+$^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$^\d{17}[\dXx]$日期验证:
^\d{4}-\d{2}-\d{2}$^\d{2}:\d{2}:\d{2}$中文字符:
[\u4e00-\u9fa5]^[\u4e00-\u9fa5]+$前瞻和后顾【可不学】:
(?=pattern):正向前瞻,匹配后面是 pattern 的位置(?!pattern):负向前瞻,匹配后面不是 pattern 的位置(?<=pattern):正向后顾,匹配前面是 pattern 的位置(?<!pattern):负向后顾,匹配前面不是 pattern 的位置修饰符【建议学】:
i:忽略大小写g:全局匹配m:多行模式s:单行模式(. 匹配换行符)命名分组【可不学】:
(?<name>pattern):命名捕获分组\k<name>:引用命名分组高级特性在日常开发中使用较少,可以先了解概念,需要时再深入学习。前瞻和后顾主要用于复杂的匹配场景,如密码强度验证(必须包含大小写字母、数字、特殊字符)。
这个阶段主要给大家分享几个例子,其实没必要专门学习,直接在自己的项目中实战就好了。
▼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复制代码// 匹配 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
Q1:正则表达式为什么这么难?
A:正则表达式的语法比较抽象,看起来像乱码。但只要理解了每个元字符的含义,多练习几次就能掌握。建议从简单的正则开始,逐步增加复杂度。
Q2:如何调试正则表达式?
A:使用在线测试工具(如 Regex101)可以实时查看匹配结果,并且能看到每个部分的匹配过程。这对调试正则表达式非常有帮助。
Q3:正则表达式的性能如何优化?
A:1)避免使用过多的回溯(如嵌套的 * 和 +);2)使用非捕获分组 (?:) 代替捕获分组 ();3)将简单的字符串匹配放在前面;4)使用具体的字符类代替 .。
Q4:需要记住所有正则表达式吗?
A:不需要。常用的正则表达式模式(如邮箱、手机号、URL)可以直接使用现成的模板。遇到复杂的正则,可以查阅文档或使用 AI 工具生成。
正则表达式是文本处理的利器,虽然语法看起来复杂,但只要掌握了基本规则和常用模式,就能在各种场景下游刃有余。正则表达式不需要深入学习所有特性,掌握基础语法和常用模式就足够应对大部分开发场景。
在 AI 时代,正则表达式仍然是不可替代的工具。即使有了 AI 辅助,理解正则表达式的原理也能让你更好地利用这些工具,提升开发效率。
建议大家多使用在线测试工具进行练习,遇到复杂的正则可以让 AI 工具帮忙生成和解释。希望这份学习路线能够帮助大家快速掌握正则表达式。

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