LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

正则表达式完全指南:从入门到精通

admin
2025年12月10日 1:44 本文热度 8

什么是正则表达式?

正则表达式(Regular Expression,简称 Regex 或 RegExp)是一种强大的文本模式匹配工具。它就像一把"文字筛子",能够帮你从大量文本中快速找到符合特定规则的内容。

无论你是程序员、数据分析师,还是日常需要处理大量文本的普通用户,掌握正则表达式都能让你的工作效率提升数倍。

在 Shell 脚本编写中,以及在常用的文本处理工具——grep、sed、awk(被称为“文本处理三剑客”)中,正则表达式都是不可或缺的核心语法,用于模式匹配、文本筛选与内容替换。

为什么要学习正则表达式?

如果你经历过下面这些场景,可能会更能体会到正则表达式的强大之处:

  • • 从几千个邮箱地址中筛选出所有 Gmail 邮箱
  • • 验证用户输入的手机号码格式是否正确
  • • 批量替换文档中的特定格式内容
  • • 从网页中提取所有的网址链接(网络爬虫脚本中常有类似需求)

这些任务如果手动处理会耗费大量时间,但使用正则表达式,几行代码就能搞定!

基础语法入门

1. 字面量匹配

最简单的正则表达式就是直接匹配文本:

正则:hello
匹配:hello world 中的 "hello"

2. 元字符

正则表达式的强大之处在于元字符,它们具有特殊含义:

  • • . - 匹配任意单个字符(除换行符)
  • • ^ - 匹配字符串开头
  • • $ - 匹配字符串结尾
  • • * - 匹配前面的元素 0 次或多次
  • • + - 匹配前面的元素 1 次或多次
  • • ? - 匹配前面的元素 0 次或 1 次
  • • {m} - 前面的字符恰好出现 m 次
  • • {m,} - 前面的字符至少出现 m 次以上
  • • {m, n} - 前面的字符出现次数在 m 与 n 之间
  • • | - 表示“或(OR)”的逻辑关系,它用来匹配多个可能的子表达式之一

3. 字符类

用方括号 [] 定义字符集合:

[abc]     匹配 a、b 或 c
[0-9]     匹配任意数字
[a-z]     匹配任意小写字母
[A-Z]     匹配任意大写字母
[^abc]    匹配除了 a、b、c 之外的任意字符

4. 转义字符

\ 就是正则的转义字符(escape character),它有两种常见作用:

作用类型
示例
含义
① 赋予普通字符特殊意义
\d
\s\w
表示数字、空白、字母数字等
② 让特殊字符“变普通”
\.
\*\\
匹配真正的点号、星号或反斜杠

5. 预定义字符类

为了方便,正则表达式提供了常用的简写(大写字母用来表示小写字母的否定含义):

  • • \d - 匹配数字,等价于 [0-9]
  • • \w - 匹配字母、数字、下划线,等价于 [A-Za-z0-9_]
  • • \s - 匹配空白字符(空格、制表符等)
  • • \D - 匹配非数字
  • • \W - 匹配非字母数字下划线
  • • \S - 匹配非空白字符
  • • \b - 匹配单词的边界
  • • \B - 匹配非单词边界

实用案例解析

案例 1:验证邮箱地址

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

解析:

  • • ^ 开始位置
  • • [a-zA-Z0-9._-]+ 用户名部分(字母数字及特殊符号)
  • • @ @ 符号
  • • [a-zA-Z0-9.-]+ 域名部分
  • • \. 点号(需要转义)
  • • [a-zA-Z]{2,} 顶级域名(至少2个字母)
  • • $ 结束位置

案例 2:提取手机号码

1[3-9]\d{9}

解析:

  • • 1 以 1 开头
  • • [3-9] 第二位是 3-9
  • • \d{9} 后面跟 9 个数字

案例 3:匹配 URL

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

解析:

  • • https? http 或 https(? 表示 s 可选)
  • • :// 协议分隔符
  • • [a-zA-Z0-9.-]+ 域名
  • • \.[a-zA-Z]{2,} 顶级域名
  • • (/[^\s]*)? 可选的路径部分

案例 4:密码强度验证

要求:至少 8 位,包含大小写字母和数字

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

解析:

  • • (?=.*[a-z]) 正向预查,确保有小写字母,参考下文高级技巧部分第 4 条
  • • (?=.*[A-Z]) 确保有大写字母
  • • (?=.*\d) 确保有数字
  • • .{8,} 至少 8 个字符

高级技巧

1. 分组与捕获

使用圆括号 () 创建分组:

(\d{4})-(\d{2})-(\d{2})

可以捕获日期的年、月、日三个部分。

2. 非捕获组

如果只想分组但不捕获,使用 (?:)

(?:http|https)://\w+

3. 贪婪与非贪婪匹配

  • • 贪婪模式(默认):.* 尽可能多地匹配
  • • 非贪婪模式:.*? 尽可能少地匹配
<div>.*?</div>  # 非贪婪,匹配最短的 div 标签
<div>.*</div>   # 贪婪,可能匹配多个 div

4. 零宽断言(zero-width assertion)

  • • (?=...) - 正向肯定预查(后面必须满足)(?=Y) 匹配前面的内容,但要求后面紧跟 Y。
  • • (?!...) - 正向否定预查(后面不能满足)(?!Y) 匹配前面的内容,但要求后面不能是 Y。
  • • (?<=...) - 反向肯定预查(前面必须满足)(?<=Y)匹配后面的内容,但要求前面必须是 Y。
  • • (?<!...) - 反向否定预查(前面不能满足)(?<!Y) 匹配后面的内容,但要求前面不能是 Y。
\w+(?=:)  #匹配冒号前面的单词,例如:user:admin,匹配结果为"user"

foo(?!bar) # 匹配 "foo",但后面不能跟 "bar"。例如: foobar   → ❌ 不匹配   foo123   → ✅ 匹配

(?<=@)\w+ #匹配邮箱中 @ 后面的用户名部分,例如:user@example.com,匹配结果为"example"

(?<!@)\b\w+\b #匹配所有不在 @ 后的单词,例如:email@example.com hello world,匹配结果为"email, hello, world"

常用工具推荐

学习和测试正则表达式,这些工具非常有用:

  1. 1. Regex101 (https://regex101.com) - 在线测试,提供详细解释
  2. 2. RegExr (https://regexr.com) - 可视化正则表达式
  3. 3. 正则表达式教程https://regexper.cn- 中文教程
  4. 4. IDE 内置工具 - VS Code、IntelliJ IDEA 等都支持正则搜索

注意事项

  1. 1. 性能问题:复杂的正则表达式可能导致性能问题,尤其是回溯过多时
  2. 2. 可读性:过于复杂的正则很难维护,建议添加注释或拆分
  3. 3. 转义字符:特殊字符需要转义,如 . → \.
  4. 4. 不同语言的差异:各编程语言的正则实现略有差异,使用时注意查阅文档

实践建议

  1. 1. 从简单开始:先掌握基础语法,再逐步学习高级特性
  2. 2. 多练习:在实际项目中应用,积累经验
  3. 3. 善用工具:利用在线测试工具验证正则表达式
  4. 4. 保存常用模式:建立自己的正则表达式库

结语

不管你想掌握哪一门编程语言,正则表达式都是都绕不过去的必备技能之一,虽然初看复杂,但掌握后会成为你的得力助手。不要被眼花缭乱的符号吓倒,从简单的模式开始,逐步练习,你会发现正则表达式其实没那么难!

正则表达式的核心是"模式匹配",理解了这个概念,剩下的就是熟悉各种符号的用法了。

现在就开始你的正则表达式学习之旅吧!


阅读原文:原文链接


该文章在 2025/12/10 18:33:56 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved