我试图更好地了解贪婪匹配的回溯过程。
请求您的帮助以确认/纠正以下提及的我的断言。
正则表达式:.*man
测试字符串:ithmati
我使用了regex101.com调试器,并将匹配过程的前11个步骤捕获到了我已附加到此帖子的图片中。
断言:在步骤9中,将引擎在测试字符串中回溯到“ h”的原因是因为它已经在步骤6中回溯到了“ m”,所以下一个最佳方法是再往后退。
答案 0 :(得分:0)
您显示的步骤似乎完全符合我的预期。在步骤#9中,引擎未能在下一个位置找到字母n
,从而无法完成.*man
的匹配。由于.*
是贪婪的,因此引擎从字符串的 end 开始,并尝试首先找到man
的 latest 。由于在第一个ma
比赛中没有发生这种情况,因此引擎会倒退以尝试找到更早的比赛。它找不到较早的匹配机会,因此该模式将在没有匹配的情况下失败。