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

前端之家收集整理的这篇文章主要介绍了正则笔记-贪婪,非贪婪模式。前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

笔记笔记!

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

非贪婪也叫懒惰模式。

正则的量词如下。

?: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。


其实这就是上限和下限。

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

小子不才,欢迎指正!

猜你在找的正则表达式相关文章