正则表达式贪婪匹配和回溯

时间:2019-03-13 14:50:00

标签: regex regex-greedy

我试图更好地了解贪婪匹配的回溯过程。

请求您的帮助以确认/纠正以下提及的我的断言。

正则表达式:.*man

测试字符串:ithmati

我使用了regex101.com调试器,并将匹配过程的前11个步骤捕获到了我已附加到此帖子的图片中。

断言:在步骤9中,将引擎在测试字符串中回溯到“ h”的原因是因为它已经在步骤6中回溯到了“ m”,所以下一个最佳方法是再往后退。

Pic: Greedy backtracking

Pic: Non-greedy backtracking

1 个答案:

答案 0 :(得分:0)

您显示的步骤似乎完全符合我的预期。在步骤#9中,引擎未能在下一个位置找到字母n,从而无法完成.*man的匹配。由于.*是贪婪的,因此引擎从字符串的 end 开始,并尝试首先找到man latest 。由于在第一个ma比赛中没有发生这种情况,因此引擎会倒退以尝试找到更早的比赛。它找不到较早的匹配机会,因此该模式将在没有匹配的情况下失败。