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
匹配没有发生这种情况,因此引擎会倒退以尝试找到更早的匹配。它没有找到任何更早的匹配机会,因此模式在没有匹配的情况下失败。
我试图更好地理解贪婪匹配的回溯过程。
请求您帮助 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
匹配没有发生这种情况,因此引擎会倒退以尝试找到更早的匹配。它没有找到任何更早的匹配机会,因此模式在没有匹配的情况下失败。