当前位置: 首页 > news >正文

正则表达式实战指南:原理、口诀与高频场景案例


正则表达式实战指南:原理、口诀与高频场景案例

正则表达式(Regular Expression)是程序员处理文本的瑞士军刀,被广泛应用于数据验证、日志分析、爬虫开发等领域。本文将从原理讲解口诀速查高频实战案例,带你系统掌握正则表达式的核心知识与实用技巧。


一、原理简述:正则表达式的本质

正则表达式是一种用特定符号(元字符)描述字符串匹配规则的“公式”。本质上,它是用简洁的符号组合,描述哪些字符串是你要的

  • 每个元字符代表一种规则或条件,如“数字”、“字母”、“开头结尾”等。
  • 通过组合元字符,可以拼出复杂的筛选条件。
  • 正则表达式引擎会逐字符扫描目标文本,按规则查找或验证。

转义符 \ 的作用
遇到如 .* 等特殊含义的元字符,需用 \ 进行转义,如 \. 匹配真实的小数点,\\ 匹配反斜杠本身。


二、元字符速查表与记忆口诀

常用元字符及口诀

元字符含义口诀示例
.任意单字符(除换行)小点能代啥都行a.b 匹配 a1b
*前项0次或多次星号零多随你挑ab* 匹配 a、ab、abb
+前项1次或多次加号一多不能少ab+ 匹配 ab、abb
?前项0次或1次问号可有可无ab? 匹配 a、ab
[]括号内任一字符方括任选一个[abc] 匹配 a,b,c
{n}前项精确n次花括定次数\d{3} 匹配 123
{n,m}前项n到m次量词范围花括定\d{2,4} 匹配12、1234
\d一位数字d是digit数字\d\d 匹配 12
\w字母/数字/下划线w是word单词成员\w\w 匹配 a1
\s空白符(空格/制表/换行)s是space空白符\s+ 匹配空格
^字符串开头脱字符锁开头^abc 匹配abc开头
$字符串结尾美元符定结尾abc$ 匹配abc结尾
()分组/整体应用小括号成团结队(ab)+ 匹配 abab
|或者分支竖线二选一a|b 匹配a或b
[^abc]非括号内任意字符方括脱字符排除[^a] 匹配非a字符

口诀记忆法

  1. 点星加问方,花括次数量。
  2. 转义反斜杠,符号真实样。
  3. 脱字符开头,美元符结尾,方括内排除,分组小括忙。
  4. 竖线是或,\d数字,\w词,\s空。
    当然可以!下面是对正则表达式相关口诀的详细解释说明,帮助你理解每句口诀背后的含义和用法。

正则表达式口诀解释说明

1. 点星加问方,花括次数量。

  • 点(.):匹配任意一个字符(除了换行符)。
    例:a.b 能匹配 acba1ba-b 等。
  • 星号(*):表示前面的内容出现0次或多次。
    例:ab* 能匹配 aababbabbb 等。
  • 加号(+):表示前面的内容出现1次或多次。
    例:ab+ 能匹配 ababb,但不匹配 a
  • 问号(?):前面的内容出现0次或1次。
    例:ab? 能匹配 aab
  • 方括号([]):括号内任意一个字符都能匹配。
    例:[abc] 匹配 abc
  • 花括号({n}、{n,m}):指定前面内容出现的次数或范围。
    例:\d{3} 匹配3位数字,\d{2,4} 匹配2到4位数字。

口诀含义:这一句总结了正则表达式最常用的匹配次数和内容描述符号,写正则时灵活组合,可以覆盖大多数基础场景。


2. 转义反斜杠,符号真实样。

  • 反斜杠(\):用于转义,让特殊符号变成普通字符,或者让普通字符有特殊含义。
    例:\. 匹配“.”本身,而不是“任意字符”;\d 匹配数字;\\ 匹配反斜杠本身。
  • 符号真实样:如果你要匹配的就是一个特殊符号(如点、星号、加号等),一定要加反斜杠“逃逸”一下,才能按字面意义识别。

口诀含义:提醒你遇到特殊符号要注意用反斜杠转义,否则表达的意思就会变。


3. 脱字符开头,美元符结尾,方括内排除,分组小括忙。

  • 脱字符(^):在正则最前面表示“字符串开头”。
    例:^abc 匹配以 abc 开头的字符串。
  • 美元符($):在正则最后面表示“字符串结尾”。
    例:abc$ 匹配以 abc 结尾的字符串。
  • 方括号内^([^…]):在方括号第一个位置表示“排除”,匹配不在括号内的字符。
    例:[^a] 匹配任何非 a 的字符。
  • 小括号(()):用于分组,一是整体应用量词,二是捕获分组内容,方便后续引用。
    例:(ab)+ 匹配 ababab\1 可以引用第一个分组的内容。

口诀含义:总结了正则中“定位”、“排除”和“分组”相关的用法,是写复杂表达式时的核心工具。


4. 竖线是或,\d数字,\w词,\s空。

  • 竖线(|):表示“或者”分支,可以实现多选。
    例:cat|dog 匹配 catdog
  • \d:匹配一位数字(0-9),等价于 [0-9]
  • \w:匹配字母、数字、下划线,等价于 [A-Za-z0-9_]
  • \s:匹配空白字符,包括空格、制表符、换行等。

口诀含义:把常用的“或分支”和“快捷字符集”记下来,写正则更高效。


四、高频场景案例与解析

1. 手机号精准匹配(中国)

^1[3-9]\d{9}$
  • ^1:以1开头;
  • [3-9]:第二位为3-9;
  • \d{9}:后九位数字;
  • $:结尾。

场景:注册、绑定手机


2. 邮箱格式验证(支持多级域名)

^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$
  • 用户名可含字母、数字、下划线、点、短横线
  • 支持多级域名
  • 顶级域名2-6位字母

场景:注册、邮件校验


3. 强密码校验(8-20位,含数字、大小写字母、特殊符号)

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*]).{8,20}$
  • 多个正向预查,分别要求至少出现1个数字、小写、大写、特殊符号

场景:注册、改密


4. IPv4地址匹配

^((25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)$
  • 精确限制每段0~255

场景:网络、日志


5. 中文姓名(含“·”间隔符)

^[\u4e00-\u9fa5]{2,8}(·[\u4e00-\u9fa5]{1,8})?$
  • 支持少数民族姓名的“·”分隔

场景:实名认证、表单校验


6. 日期格式(YYYY-MM-DD)

^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
  • 年月日格式,简单合法性校验

场景:数据录入、表单校验


7. 提取HTML标签内容(非贪婪)

<([a-z][a-z0-9]*)\b[^>]*>(.*?)</\1>
  • 捕获标签名与内容,非贪婪避免跨标签

场景:网页爬虫、文本提取


8. 删除多余空格

\s{2,}
  • 匹配2个及以上空白字符,替换为单个空格

场景:文本清洗


9. 匹配十六进制颜色值

^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$
  • 支持#FFF和#FFFFFF

场景:前端开发、样式校验


10. 匹配信用卡号(16位数字,4位分隔)

^\d{4}(-\d{4}){3}$
  • 或纯数字版:^\d{16}$

场景:支付、金融


11. 匹配连续重复单词

\b(\w+)\b\s+\1\b
  • 检查如 “is is”、“the the”

场景:拼写检查


12. 提取URL中的域名

^(?:https?://)?([^/?#]+)
  • 提取主域名部分

场景:日志、SEO


四、实用细节与优化建议

  • 贪婪与非贪婪.*默认贪婪,.*?非贪婪,提取内容时优先用非贪婪。
  • 特殊字符位置:如^在[]内表示取反,在外表示开头。
  • 性能问题:避免嵌套量词(如(a+)+),防止回溯爆炸;复杂需求建议分步处理。
  • 调试工具:推荐 regex101.com、RegExr Debuggex(可视化正则引擎流程)

五、总结与建议

  • 本质:正则=用特殊符号组合描述字符串“筛选条件”
  • 口诀:点星加问方,组合灵活用;脱字符开头,美金符结尾;斜杠d是数字,斜杠w是字母;竖线是或者,分支随你挑。
  • 实战:速查元字符表+高频案例,遇到复杂需求先用自然语言描述,再逐步拆解为正则。

收藏本博客,查找正则表达式再也不犯难!如需定制场景,欢迎留言交流。


相关文章:

  • 姚琛全新特别版EP上线 携手金牌制作人诠释夏日浪漫
  • Python 基础知识
  • 正则表达式(Regular Expression)详解
  • 配置VS的DLL文件引用目录(两种方案,无需每次生成dll后手动将其复制到exe目录下)
  • 表面等离子共振技术(SPR)在小分子与蛋白质相互作用研究中的应用
  • MyBatis 动态 SQL 完整笔记
  • 世界少棒联盟(Little League Baseball)·棒球1号位
  • 【LangChain基础系列】深入全面掌握文本分类
  • C——VS的调试技巧
  • 更多 QVariant 使用案例
  • Python序列Day3
  • 如何对 Oracle 日志文件进行校验
  • 钯铂贵金属分离回收树脂
  • Nginx 配置多个监听端口
  • obj = null; 赋值null之前没有其他引用指向obj对象,那么,当obj=null时,会被垃圾回收机制立即回收吗?
  • 编程题 02-线性结构2 一元多项式的乘法与加法运算【PAT】
  • PostgreSQL 的 pg_current_logfile 函数
  • 【Ubuntu】Netplan静态网络配置
  • 缺乏实体人形机器人的主流高精度仿真方案
  • Flutter接入ProtoBuff和原生Android通信【性能最优】
  • 视频丨习近平同普京在主观礼台出席红场阅兵式
  • 近4小时会谈、3项联合声明、20多份双边合作文本,中俄元首今年首次面对面会晤成果颇丰
  • 范志毅跨界归来做青训,探索中国足球人才培养新模式
  • 外卖员投资失败负疚离家流浪,经民警劝回后泣不成声给父母下跪
  • AI智能体,是不是可以慢一点? | ToB产业观察
  • 巴方称印军发动24起袭击,巴境内6处地点遭袭致8人死亡