У меня есть текст со многими животными видов цертина и некоторыми ловушками, и другой текст без значения, например, "cat dog house 131 bird 1341 house trap cat cat cat dog trap house dog house trap
".
Я пытаюсь построить регулярное выражение, которое найдет животное с ближайшим приоритетом для каждой ловушки, например, "кошачья собака домик 131 птица 1341 домик ловушка кошка кошка кошка собака ловушка дом собака дом ловушка ".
Я написал это регулярное выражение: (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
Почему это? Я пытался привязать его к началу, добавив ^.*?
к регулярному выражению, но это не помогло.