据我了解,匹配失败时,正则表达式会回溯到上一个最接近的选择,选择下一个替代方案并继续匹配。如果没有匹配的可能性,正则表达式会避免回溯吗?
这是一个场景,我无法向自己解释这个regex101 调试器输出。
正则表达式:^(?<Major>0|[1-9][0-9]*)\.(?<Minor>0|[1-9][0-9]*)\.(?<Patch>0|[1-9][0-9]*)$
输入字符串:1.222222222222.33333333333.0
为什么上面的正则表达式在最后会回溯,当没有机会$
匹配避免的 时[0-9]
? 补丁组用尽后,它会避免回溯([1-9][0-9]*)
Minor 和 Major 的部分吗? 如果是这样,如何以及为什么?
如果有人有更好的例子来展示正则表达式如何决定回溯与否,我们将不胜感激。
编辑1:为什么Regex假设可以通过回溯[0-9] *找到$?
这是否取决于正则表达式引擎的类型?如果是,那么最佳做法是什么,以避免这种回溯。