正则表达式学习路线 | 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 资源大全 中找到很多工具。

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:匹配非单词边界

学习资源

在线工具

阶段 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]+$

学习资源

阶段 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

学习资源

常见问题

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 必备

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
程序员鱼皮
下载 APP