编程这事果然就像修仙:一朝顿悟,白日飞升。之前看了两天正则贪婪模式愣是没明白,昨天忽然之间就知道是个啥东西了。好吧,其实是我语文不过关,没理解啥意思。
笔记笔记!
量词是贪婪的,因为他会尽可能多的匹配。非贪婪则是和贪婪对立面,正则表示上只需要在贪婪的正则表示后面加个?即为非贪婪,就像==和!=一样取反操作。
非贪婪也叫懒惰模式。
正则的量词如下。
?: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。
其实这就是上限和下限。
一个区间之内,正则优先匹配上限(贪婪),想要匹配下限(非贪婪)则在正则后面加个?即可。
小子不才,欢迎指正!