正则笔记-贪婪,非贪婪模式。

编程这事果然就像修仙:一朝顿悟,白日飞升。之前看了两天正则贪婪模式愣是没明白,昨天忽然之间就知道是个啥东西了。好吧,其实是我语文不过关,没理解啥意思。

笔记笔记!

量词是贪婪的,因为他会尽可能多的匹配。非贪婪则是和贪婪对立面,正则表示上只需要在贪婪的正则表示后面加个?即为非贪婪,就像==和!=一样取反操作。

非贪婪也叫懒惰模式。

正则的量词如下。

?:0个或一个。

+:一个或以上。

*:0个或以上。

{1,5}:精确范围, ‘,’号前面表示下限,后面表示上限。表示1到5个。

{,5}:表示0到5个。

{2,}:表示至少2个,没有上限。


拿?来说,按照尽可能多的匹配原则来讲,当一个字符串中即出现了可以匹配0个也可以一个那么他会优先选择一个。说的有点绕口。

来实际验证一下好了。

9?的意思是匹配0个9或者一个9,因为量词是贪婪的,所以他会优先匹配1个9就是字符串的9。所以,字符串9高亮了。?那么我想要匹配0个9,也就是尽可能少匹配。那么只需要在?量词后面再加一个?就可以了。


非贪婪


这时候字符串9就不是高亮的了,因为我尽可能少匹配了。

就像两次?的定义,他是可以匹配0个和1个的,尽可能少匹配的时候就是匹配0个。

同理 9{0,1}个9?是一样的,那么当9{0,9}想要变成非贪婪模式的话只需要在后面再?就变成了9{0,1}?。


如下。再看。


字符串:abcxxxc

正则:a.*c

这时候正则匹配了整个字符串,因为他是贪婪的,想要更多。

但是我只想要abc被匹配。二后面xxxc我不想要,那么还是只需要在正则后面加个?即可。



如图,当加了问好之后只有abc前三个高亮,这就完成了非贪婪模式。

同理用精确表达就是 a.{0,}?c。


其实这就是上限和下限。

一个区间之内,正则优先匹配上限(贪婪),想要匹配下限(非贪婪)则在正则后面加个?即可。

小子不才,欢迎指正!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值