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

Regular Expression: Backtracking in Possessive Quantifier

我在复习测试时注意到所有格量词实际上在 str.split() 中有效。所以我写了下面的代码:

String str = "aaaaab";

if(str.matches("a*+b"))
    System.out.println("I backtrack");
else
    System.out.println("Nope.");

当运行时,打印出I backtrack。这就是为什么这令人困惑,有人告诉我所有格量词永远不会回溯,那么为什么 a*+ 会放弃字符串中的 b

我想要的是有关所有格量词何时回溯的更详细解释。

您的示例中没有回溯。

你说的是 "any number of a characters"。因此,引擎将收集这 5 a 个字符,然后停止;然后找到 b

仅此而已。

回溯意味着引擎在收集了太多的输入字符串之后必须"track back";有关示例,请参阅 here

除此之外:您的 if 条件 returns true 当模式与输入匹配时。您认为这意味着 "it is backtracking" 的结论是不正确的:

一场比赛就是一场比赛;无论引擎是否必须回溯才能匹配(或不匹配)。换句话说:你的小测试没有告诉你任何东西(它只告诉你输入是否匹配给定的模式;句点)。