我正在审查一个测试,注意到所有格量词实际上在str.split()
中起作用。 所以我写了以下代码:
String str = "aaaaab";
if(str.matches("a*+b"))
System.out.println("I backtrack");
else
System.out.println("Nope.");
运行时,这将打印出I backtrack
。这就是为什么这令人困惑,有人告诉我所有格量词永远不会回溯,那么a*+
为什么要放弃字符串中的b
呢?
我想要的是更详细地解释所有格量词何时回溯。
您的示例中没有回溯。
你说的是"任意数量的a
字符"。因此,引擎将收集这 5 个a
字符,然后停止;然后找到b
.
这就是全部内容。
回溯意味着引擎在收集了太多的输入字符串后必须"回溯";有关示例,请参见此处。
除此之外:当模式与输入匹配时,您的 if 条件返回 true。你的结论是这意味着"这是回溯"是不正确的:
匹配就是匹配;无论引擎是否必须回溯才能匹配(或不匹配(。换句话说:你的小测试不会告诉你任何事情(它只告诉你输入是否与给定的模式匹配;句点(。