Посмотрите, что он соответствует:
public static void main(String[] args) throws Exception {
Pattern pat = Pattern.compile("(?<!function)\\w+");
Matcher mat = pat.matcher("function example");
while (mat.find()) {
System.out.println(mat.group());
}
}
Выход:
function
xample
Итак, сначала он находит function
, который не предшествует "function
". Затем он находит xample
, которому предшествуют function e
и поэтому не «function
».
Предположительно вы хотите шаблон для сопоставления текста с весь, а не просто найти матчи в тексте.
Вы можете сделать это с помощью Matcher.matches()
или вы можете изменить шаблон, чтобы добавить начальные и конечные якоря:
^(?<!function)\\w+$
Я предпочитаю второй подход, поскольку это означает, что сама модель определяет свою область соответствия, а затем регион определяется его использованием. Однако это вопрос предпочтения.