例如:booooooaaobbbbbyy
匹配规则:.*(b.+b).*
匹配结果:bbb
个人理解,.*根据正则表达式会尽可能多的匹配字符串,所以,第一次匹配时会将整个字符串匹配下来,并记录回溯点(最后一个y)
然后继续根据匹配规则进行匹配,即匹配b,结果引擎发现没有b,于是进行回溯,.*会将之前匹配的字符串从右到左“吐”出一个字符,即吐出y并记录回溯点y,后与b进行匹配,重复如此,直至匹配到第一个b为止,即byy的b,此时.*:booooooaaobbbb,b:b,回溯点:b
接着正则引擎向下进行匹配,匹配到y,符合.*,继续在剩下的y中匹配b,发现无,于是从回溯点继续向前回溯即从booooooaaobbbb吐出一个b供剩下的表达式进行匹配…………
booooooaaobbbbbyy
匹配规则:.*(b.+b).*
匹配结果:bbb
匹配规则:.*(b.*b).*
匹配结果:bb
匹配规则:.*(b.+b).*
匹配结果:bbb
匹配规则:.*?(b.*?b).*
匹配结果:booooooaaob
匹配规则:.*?(b.*b).*
匹配结果:booooooaaobbbbb
把握住贪婪尽可能多的匹配,非贪婪尽可能少的匹配