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

【一文了解】正则表达式

目录

正则表达式

1.理解正则表达式

2.正则的核心作用

2.1.验证(判断文本是否符合格式)

2.2.提取(从文本中抓出需要的内容)

2.3.替换(批量修改文本内容)

3.理解正则的2个核心概念:“原子”和“量词”

3.1.原子:“单个要匹配的内容”

1)特殊转义字符

2)特殊转义字符:常用反义词

3)字符集

4)组合字符

3.2.量词:“原子要重复多少次”

3.3.组合示例

4.核心使用原则

5.常用正则模板


       本篇文章来分享一下正则表达式。

正则表达式

1.理解正则表达式

       首先来理解一下正则表达式(简称“正则”),我们可以把它看作一套“文本匹配与处理的通用规则”,用特定符号组合成“模式”,告诉程序“要找什么样的文本”“怎么处理找到的文本”。

用“生活场景”类比正则

比如你想在一堆文件中找“所有以‘报告’开头、以‘2025.pdf’结尾的文件”,用自然语言描述的规则是:

1)开头必须是“报告”;

2)中间可以是任意内容(比如“销售”“财务”);

3)结尾必须是“2025.pdf”。

那此时对应的正则模式就是^报告.*2025\.pdf$,其中:

1)^代表“开头”,$代表“结尾”(锁定完整字符串);

2).*代表“任意字符重复任意次”(中间的任意内容);

3)\.代表“实际的点”(因为.在正则中有特殊含义,需要转义)。

       简而言之,正则就是把“自然语言的匹配规则”,翻译成程序能懂的“符号代码”。其本质是“用符号描述文本规则”

2.正则的核心作用

       正则的价值在于“用简洁的模式替代复杂的代码逻辑”,核心场景分3类:

2.1.验证(判断文本是否符合格式)

比如:

1)手机号是否是“1开头+10位数字”?正则:^1[3-9]\d{9}$;

2)邮箱是否有“@”和“.”?正则:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$;

3)密码是否包含“字母+数字+8位以上”?正则:^(?=.*[A-Za-z])(?=.*\d).{8,}$。

没有正则时,你需要写几十行代码判断字符类型、长度、特殊符号位置;有了正则,一行模式就能搞定。

2.2.提取(从文本中抓出需要的内容)

比如:

1)从“订单号:20251016001,金额:99元”中提取订单号和金额,正则:订单号:(\d+),金额:(\d+)元((\d+)代表“提取连续数字”);

2)从HTML标签<title>首页</title>中提取标题,正则:<title>(.*?)</title>(.*?代表“非贪婪匹配,只抓标签内的内容”)。

2.3.替换(批量修改文本内容)

比如:

1)把所有手机号中间4位换成“****”,正则匹配:(\d{3})\d{4}(\d{4}),替换为:$1****$2($1代表第一个括号提取的内容,$2代表第二个);

2)把文本中所有“张三”换成“李四”,正则:张三(简单匹配直接替换)。

3.理解正则的2个核心概念:“原子”和“量词”

       正则模式的最小组成单元是“原子”(单个匹配元素)和“量词”(原子的重复次数),所有复杂正则都是这两者的组合。

3.1.原子:“单个要匹配的内容”

可以理解为“最小的匹配单元”,常见类型:

符号/表达式

含义

示例

普通字符

匹配字符本身

 a 只匹配“a”

特殊转义字符

有特殊含义的字符

\d匹配数字(0-9)

字符集

匹配字符集[]中的某一字符

[0-9]匹配0-9任意一个数字(等同于 \d)

组合符号

把()内的内容作为整体进行匹配

(abc)把“abc”当作一个整体匹配

1)特殊转义字符

符号/表达式

含义

\w

匹配字母或数字或下划线

\s

匹配任意的空白符

\d

匹配数字

\b

匹配单词的开始或结束

^

匹配字符串的开始

$

匹配字符串的结束

.

匹配除换行符以外的任意字符

2)特殊转义字符:常用反义词

符号/表达式

含义

\W

匹配任意不是字母,数字,下划线,汉字的1字符[A-Za-z0-9_]

\S

匹配任意不是空白符的字符

\D

匹配任意非数字的字符

\B

匹配不是单词开头或结束的位置

[^x]

匹配除了x以外的任意字符

[^aeiou]

匹配除了aeiou这几个字母以外的任意字符

3)字符集

符号/表达式

含义

[a-z]

匹配“a到z”任意一个小写字母(字符集,范围用 - 连接)

[A-Z]

匹配“A到Z”任意一个大写字母

[0-9]

匹配“0到9”任意一个数字(等同于 \d)

[a-zA-Z0-9]

匹配“字母+数字”任意一个(等同于 \w,但不含下划线)

4)组合字符

符号/表达式

含义

示例

(abc)

分组:把“abc”当作一个整体原子(可用于提取内容、重复控制)

(ab)+ →匹配“ab”“abab”“ababab”

.*

匹配“任意字符重复任意次”(贪婪匹配:尽可能多匹配)

a.*c →匹配“a123c”“a@#c”,也匹配“a123b456c”(连中间的b也包含)

.*?

匹配“任意字符重复任意次”(非贪婪匹配:尽可能少匹配)

a.*?c →匹配“a123ca@#c”,不匹配“a123b456c”(到第一个c就停止)

3.2.量词:“原子要重复多少次”

控制原子的匹配次数,常见类型:

量词

示例

含义

*

a*

匹配0次或多次(比如 a* 可匹配“”“a”“aa”)

+

a+

匹配1次或多次(必须至少有1个“a”)

?

a?

匹配0次或1次(最多1个“a”)

{n}

a{3}

精确匹配n次(比如 a{3} 只匹配“aaa”)

{n,}

a{2,}

匹配n次或更多(至少2个“a”)

{n,m}

a{2,4}

匹配n到m次(2-4个“a”)

3.3.组合示例

用“原子+量词”拼出规则,比如“匹配3-6位数字的密码”:

原子:\d(数字);

量词:{3,6}(3-6次);

正则:^\d{3,6}$(^和$锁定完整字符串,避免匹配“1234567”中的前6位)。

4.核心使用原则

1)先定位,再匹配

       复杂场景先加^和$锁定字符串范围(如验证手机号^1[3-9]\d{9}$),避免部分匹配(比如“138001380001”多1位也能匹配)。

2)特殊符号必转义

       遇到.*?[]()等特殊符号,想匹配其“本身”时,必须加\转义(如匹配“www.baidu.com”的点,需写www\.baidu\.com)。

3)量词跟在原子后

       量词(如+{3})必须紧跟“原子”(单个字符或分组),比如\d{3}(3个数字)、(ab)+(多个ab),不能单独使用。

5.常用正则模板

       其中(?=)为正向预查的语法,用于断言(判断)字符串中是否包含至少一个字母(大小写均可),但不会消耗匹配的字符(即不参与最终的匹配结果,仅做条件判断),即只检查条件是否成立,不实际匹配任何字符。

适用场景

正则表达式

匹配说明(示例)

注意事项

中国手机号验证

^1[3-9]\d{9}$

匹配11位手机号(开头13-19,后9位数字)

✅正确:13800138000、19912345678

❌错误:12345678901(开头12)、1380013800(少1位)

覆盖国内主流手机号段,不包含卫星电话等特殊号段

邮箱格式验证

^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$

匹配标准邮箱(用户名含字母/数字/下划线/减号,域名带后缀)

✅正确:test@example.com、user-123.abc@my-domain.co.uk

❌错误:test@example(无后缀)、test@.com(主域空)

日常注册/登录场景够用,不支持国际ized邮箱(如含中文)

6位数字验证码

^\d{6}$

匹配纯6位数字(常用于短信验证码、支付验证码)

✅正确:123456、008899

❌错误:12345(少1位)、12345a(含字母)

若需要4/5位,修改 {6} 为 {4}/{5} 即可

密码强度(字母+数字+8位以上)

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

匹配至少8位,且同时包含字母和数字的密码

✅正确:Abc12345、user_123456(含下划线也可)

❌错误:12345678(纯数字)、abcdefgh(纯字母)

(?=.*[A-Za-z]) 是“必须含字母”的断言,(?=.*\d) 是“必须含数字”的断言

整数/正整数验证

整数:^-?\d+$

正整数:^\d+$

整数:匹配正负整数

✅正确:123、-456、0

❌错误:123.45(含小数点)、-0(负0,无意义)

若需要排除0,正整数可改为 ^[1-9]\d*$

身份证号(18位,含X)

`^(?:\d{17}[\dXx]

\d{15})$`匹配18位身份证(最后一位可是数字或X/x)或15位旧身份证

✅正确:110101199001011234、11010119900101123X

❌错误:11010119900101123(少1位)、1101011990010112345(多1位)

仅验证格式,不验证生日合法性和校验位(如需严格验证,需结合代码逻辑)

匹配URL(简单版)

^https?://\w+(\.\w+)+(/.*)?$

匹配HTTP/HTTPS开头的网址

✅正确: https://www.baidu.com

❌错误:www.baidu.com(无http/https)、ftp://xxx.com(非http协议)

适合快速过滤URL,复杂URL(含特殊参数)需扩展

       好了,本次的分享到这里就结束啦,希望对你有所帮助~

http://www.dtcms.com/a/494790.html

相关文章:

  • MySQL中表操作
  • 中国建设银行大学助学贷款网站网站备案对网站负责人的要求
  • 江门云建站模板东城企业网站开发
  • 使用Selenium Server 4连接已经运行的Firefox
  • 普蓝机器人PlanRobot-DR200:基于多传感融合的全天候电力巡检自主导航技术与实践
  • PHPCMS V9 自定义证书查询模块(Ajax+防刷+倒计时)
  • 一体化运维平台:当下运维体系的核心支柱
  • HarmonyOS后台任务管理:短时任务与长驻任务实战
  • Unity游戏基础-6(跨平台生成游戏作品,针对安卓教程)
  • Luminex xMAP技术原理与应用概述
  • Http基础协议和解析
  • 官方网站页面尺寸html网页设计作品中国传统文化
  • h5游戏免费下载:激射神经猫
  • 商业航天与数字经济(二):商业航天重构全球数字经济的底层逻辑
  • 免费社区建站系统vue做的商城网站
  • 中电金信:首个金融信创中试平台揭牌,架设国产软硬件落地应用的“高速通道”
  • 主流移动通信标准
  • SNK施努卡驱动电机自动生产线,转子+电机总成含EOL测试
  • 解决方案 - 宽带多通道同步采集系统
  • Nginx、uwsgi、uWSGI、WSGI和Django的关系
  • 牛童三国单机游戏Unity源码 免费开源
  • 团工作网站建设意见网站编辑做图片用什么不同
  • C#,VB.NET数组去重复,提取键名和重复键和非重复键
  • java建筑工地智能交互平台源码,智慧工地SaaS云平台,对现场人员、材料、机械、质量、安全进行高效管控
  • 【计算机网络笔记】计算机网络学习笔记1
  • 企业网站添加栏目龙华建网站多少钱
  • 建安证查询网站制作二维码网站免费
  • iOS八股文之 内存管理
  • Rhino 8 for Mac 犀牛3D建模软件
  • IOS/ 安卓开发工具按键精灵Sys.GetAppList 函数使用指南:轻松获取设备已安装 APP 列表