RegEx 贪婪匹配和回溯

RegEx greedy matching and backtracking

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

请求您帮助 confirm/correct 我在下面提到的断言。

正则表达式:.*man

测试字符串:ithmati

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

断言:在第9步中,engine之所以在test string中回溯到"h"是因为在step中已经回溯到"m" 6 所以下一个最好的办法是再往前走。

Pic: Greedy backtracking

Pic: Non-greedy backtracking

您展示的步骤与我在这里所期望的完全一样。在第 9 步中,引擎未能在下一个位置找到字母 n,无法完成 .*man 的匹配。由于 .* 是贪心的,引擎从字符串的 end 开始,并尝试找到 latest 出现的 man 首先。由于第一个 ma 匹配没有发生这种情况,因此引擎会倒退以尝试找到更早的匹配。它没有找到任何更早的匹配机会,因此模式在没有匹配的情况下失败。