正则之贪婪匹配和懒惰匹配
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
开发工具与关键技术:正则
作者:黄金成 年级:2018级
撰写时间:2019年05月04日
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我们在使用正则匹配字符串时,在正则表达式加上接受重复的限定符时,它会在字符串等匹配的前提下尽可能的匹配更多的字符。例如下面的这个:
它这个虽然说是匹配到了,但是它把全部都匹配了,这个就是贪婪匹配。要是我们只要其中的一部分替换掉,那就要需要懒惰匹配了,也就是尽可能匹配少的字符,方法一共有五种。
1、*?:在下图中我们相比上一张图中在 h.*l 加上了一个?,h.*?l 这样我们就可以让其重复,但会尽可能少重复。
2、+?:在h.l中加上+?会让正则匹配重复一次或更多次,这个会比第一个匹配的要少,因为它把重复零次排除掉了。
3、??:上一个是把零次排除掉的,那么这个就是匹配重复零次或一次的,重复两次都没有匹配到。
4、{n,m}?:这个匹配重复多少次是由自己定的,像下图我要匹配重复两次到三次的,只需在?前加{n,m},n和m分别是你想要重复的次数。
5、{n,}:匹配包含至少 n个 n 的序列的字符串,就像下图一样,匹配了至少3个重复的。
知道了这些,在遇到贪婪匹配时,就可以用到这几个懒惰匹的方法。