楼主 水星钓鱼 |
Q:如何理解正则表达式的贪婪和惰性匹配原则? A:贪婪匹配(greedy):它会匹配尽可能多的字符。它首先看整个字符串,如果不匹配,对字符串进行收缩;遇到可能匹配的文本,停止收缩,对文本进行扩展,当发现匹配的文本时,它不着急将该匹配保存到匹配集合中,而是对文本继续扩展,直到无法继续匹配 或者 扩展完整个字符串,然后将前面最后一个符合匹配的文本(也是最长的)保存起来到匹配集合中。所以说它是贪婪的。 惰性匹配(lazy):它会匹配尽可能少的字符,它从第一个字符开始找起,一旦符合条件,立刻保存到匹配集合中,然后继续进行查找。所以说它是懒惰的。 举例如下: 对于字符串"a12345b",用 "\d+"模式(匹配一个或者多个数字)来进行查找匹配时,它是贪婪匹配。 从a字符开始,到1就开始有符合匹配的数字,它不着急将该匹配保存到匹配集合中,而是继续扩展字符直到结束。最后只找到一个符合匹配的文本为“12345“,在(匹配一个或者多个数字)它选择了匹配多个数字。 而用"\d+?"模式进行查找匹配时,它是惰性匹配。 从a字符开始,到1就开始有符合匹配的数字,保存,到2,也保存,到最后,就找到5个符合匹配的文本为“1”,“2”,“3”,“4”,“5”,在(匹配一个或者多个数字)它选择了只匹配一个数字。 验证代码如下:
附上贪婪和惰性匹配的转换表 |
2楼 無心 |
来学习一下, |
3楼 bluexuemei |
学习! |