正则表达式中的正向预查和反向预查是怎么回事?

正则表达式中的预查分为四种:
1、正向肯定预查 (?=pattern) 表示的是从其当前位置开始,预测后面的字符串必须匹配上pattern
2、正向否定预查 (?!pattern) 表示的是从其当前位置开始,预测后面的字符串必须匹配不上pattern
3、反向肯定预查 (?<=pattern) 表示的是从其当前位置开始,预测前面的字符串必须匹配上pattern
4、反向否定预查 (?<!pattern) 表示的是从其当前位置开始,预测前面的字符串必须匹配不上pattern

例子:
用户名的格式为:必须有包含数字和字符,且长度在4-8位之间
^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{4,8}$

解析:
^在正则表达式中表示的是开始位置
(?![0-9]+$)就是一个正向否定预查,表示的是预测从开始位置到结束位置不能全都是数字。
(?![a-zA-Z]+$)也是一个正向否定预查,表示的是预测从开始位置到结束位置不能全都是字符。
可以看出,预查是不消耗字符的,也就是说预查只是限定了前面或者后面匹配的规则,而不占用匹配的字符。
经过了两个预查限制之后,后面的pattern[0-9A-Za-z]{4,8},中括号中说明了这个位置的可选项是数字或者大小写字母,而大括号限制了其位数可以在4-8位之间,最后一个$表示了结束位置,这样就能满足要求了。
注:如果仅仅是^[0-9A-Za-z]{4,8}$则结果是4-8位的字母或数字。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值