我有许多特定种类的动物和一些陷阱的文字,以及其他没有意思的文字,例如“ cat dog house 131 bird 1341 house trap cat cat cat dog trap house dog house trap
”。
我正在尝试构建一个正则表达式,它将找到每个陷阱的最近优先级动物,例如“cat dog house 131 bird 1341 house trap cat cat cat dog trap house dog house trap ”。
我写了这个正则表达式:(cat|dog|bird)(?!.*(cat|dog|bird).*).*trap
这是我的完整 Java 代码:
Pattern p = Pattern.compile("(cat|dog|bird)(?!.*(cat|dog|bird).*).*trap");
Matcher m = p.matcher("cat dog house 131 bird 1341 house trap cat cat cat dog trap house dog house trap");
int start = 0;
while (m.find(start)) {
System.out.println(m.group(0));
System.out.println(m.group(1));
start = m.start + 1; //increment
}
奇怪的是,它只找到最后一次出现,而不是第一次、第二次和最后一次。上述代码的输出是:
dog house trap
dog
这是为什么?我试图通过添加^.*?
到正则表达式来将其锚定到开始,但它没有帮助。