【发布时间】:2011-02-15 11:47:34
【问题描述】:
我有许多特定种类的动物和一些陷阱的文字,以及其他没有意思的文字,例如“cat dog house 131 bird 1341 house trap cat cat cat dog trap house dog house trap”。
我正在尝试构建一个正则表达式,它将找到每个陷阱的最近优先级动物,例如"cat dog house 131 鸟 1341 house trap cat cat cat dog trap strong> 房子 狗 房子 陷阱”。
我写了这个正则表达式:(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
这是为什么呢?我试图通过在正则表达式前面加上 ^.*? 来将其锚定到开头,但它没有帮助。
【问题讨论】: