Matcher.find查找从给定索引开始的下一个子序列,该索引与正则表达式兼容。

如果下一个字符序列不符合标准,我该如何使它失败?

例如:

    String input = "123456text123";
    Matcher mat1 = Pattern.compile("\\d+").matcher(input);

    mat1.find();
    System.out.println(mat1.group()); //123456
    mat1.find(mat1.end());
    System.out.println(mat1.group()); //123


我想知道是否有办法使第二次查找失败,因为下一个序列与mat1模式不匹配。

我希望能够“组成”匹配器,使它们必须始终按顺序找到。

有可能吗?

最佳答案

您可以检查前一个mat1.end()是否等于下一个mat1.start()

int lastEnd = -1;
while (mat1.find()) {

    // Was there any junk between last two matches?
    if (mat1.start() != lastEnd+1) {
        System.out.println("Fail.");
        break;
    }

    System.out.println(mat1.group());
    lastEnd = mat1.end();

}

09-26 11:24