java正则表达式:所有格量词中的回溯
我在复习一个测试,注意到所有格量词实际上在str.split()
中起作用。因此,我编写了以下代码:
String str = "aaaaab";
if(str.matches("a*+b"))
System.out.println("I backtrack");
else
System.out.println("Nope.");
运行时,它会打印出I backtrack
。这就是为什么这会让人困惑,我被告知所有格量词从不后退,那么为什么a*+
会放弃字符串中的b
我想更详细地解释所有格量词何时回溯
# 1 楼答案
在你的例子中没有回溯
你说的是“任意数量的
a
个字符”。因此,引擎将收集这些5a
个字符,然后停止;然后找到b
这就是一切
回溯意味着引擎在收集了太多的输入字符串后必须“回溯”;参见here以了解这方面的示例
除此之外:当模式匹配输入时,if条件返回true。你认为这意味着“这是回溯”的结论是不正确的:
火柴就是火柴;无论发动机是否必须回程才能匹配(或不匹配)。换句话说:你的小测试没有告诉你任何事情(它只告诉你输入是否匹配给定的模式;句号)