【一文了解】正则表达式

目录

正则表达式

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(含特殊参数)需扩展

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值