正则表达式:所有格量词中的回溯



我正在审查一个测试,注意到所有格量词实际上在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。你的结论是这意味着"这是回溯"是不正确的:

匹配

就是匹配;无论引擎是否必须回溯才能匹配(或不匹配(。换句话说:你的小测试不会告诉你任何事情(它只告诉你输入是否与给定的模式匹配;句点(。

相关内容

  • 没有找到相关文章

最新更新