有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    在你的例子中没有回溯

    你说的是“任意数量的a个字符”。因此,引擎将收集这些5a个字符,然后停止;然后找到b

    这就是一切

    回溯意味着引擎在收集了太多的输入字符串后必须“回溯”;参见here以了解这方面的示例

    除此之外:当模式匹配输入时,if条件返回true。你认为这意味着“这是回溯”的结论是不正确的:

    火柴就是火柴;无论发动机是否必须回程才能匹配(或不匹配)。换句话说:你的小测试没有告诉你任何事情(它只告诉你输入是否匹配给定的模式;句号)