这个正则表达式模式中有多少组?

时间:2015-08-19 06:45:22

标签: java regex

我有以下代码段:

public static void main(String[] args) {
    String line = "This order was placed by Mr.Dufresne! OK?";
    Pattern pattern = Pattern.compile("(?<=by)(\\s+)(.*?)(\\s+)(?=OK)");
    Matcher matcher = pattern.matcher(line);
    while (matcher.find()) {
        System.out.println("group 0: " + matcher.group(0));
        System.out.println("group 1: " + matcher.group(1));
        System.out.println("group 2: " + matcher.group(2));
        System.out.println("group 3: " + matcher.group(3));
    }
}

以上代码段产生以下输出:

group 0:  Mr.Dufresne!
group 1:  
group 2: Mr.Dufresne!
group 3: 

有人可以解释为什么它会为所有匹配器组打印Mr.Dufresne!吗?

这种模式(?<=by)是什么意思?

1 个答案:

答案 0 :(得分:5)

group 0是正则表达式匹配的总字符串(请参阅Mr.Dufresne!之前和之后的空格)。

group 2是捕获的实际群组。

group 1已被spaces抓获。

group 3也是spaces

(?<=by)positive lookbehind。它是0 width assertion。它不会消耗字符串。这就是group 0中不存在的原因。使用by只有它会出现在group 0中,因为它现在也会被捕获。