http://www.rexegg.com/regex-quantifiers.html#tempered_greed
贪婪量词(默认)- 通过尽可能地吞噬允许的字符,然后逐个减少匹配的字符数量,以便为模式的其余部分腾出空间。
例如,正则表达式.*world
应用于字符串hello world
将首先尝试吞噬整个字符串并将其放入.*
中。但是它不能,因为world
无法匹配,所以.*
开始逐个放弃字符,直到它放弃了原始字符串中的world
- 在这种情况下,整个正则表达式可以匹配。
懒惰量词 - 工作方式类似,只不过相反。它们希望尽可能少地匹配字符,并且执行相同的操作,逐个添加更多字符,直到模式的其余部分有机会匹配。
但是根据我读过的这篇文章,这些看似相同的贪婪和懒惰量词的进程是不同的 - 只有懒惰量词需要“回溯”。但是当吐出先前吞下的元素时,贪婪量词也需要“回溯”,为什么会出现这种情况?这似乎很直观。