我有以下代码段:
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)
是什么意思?
答案 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
中,因为它现在也会被捕获。