我正在审查测试,发现占有量词实际上在str.split()
中有效。所以我写了下面的代码:
String str = "aaaaab";
if(str.matches("a*+b"))
System.out.println("I backtrack");
else
System.out.println("Nope.");
运行时,会打印出I backtrack
。这就是为什么这令人困惑,我被告知占有量词从不回溯,那么为什么a*+
会放弃字符串中的b
?
我想要的是对占有量量化器回溯的更详细解释。
答案 0 :(得分:2)
您的示例中没有回溯。
您说"任意数量的a
字符"。因此,引擎将收集这5个a
个字符,然后停止;然后找到b
。
这就是全部。
回溯意味着发动机必须追踪"收集输入字符串太多之后;有关此示例,请参阅here。
除此之外:当模式与输入匹配时,if条件返回 true 。你的结论是,这意味着"它是回溯"不正确:
比赛是一场比赛;无论引擎是否必须回溯才能匹配(或不匹配)。换句话说:你的小测试并没有告诉你任何事情(它只告诉你输入是否符合给定的模式;句点)。