Первый шаблон (\w{3,})(?![a-z])\b
не дает ожидаемого результата, потому что шаблон сначала соответствует 3+ символам слова, а затем утверждает с отрицательным прогнозом (?!
, что то, что находится непосредственно справа, не является строчным символом az.
Это утверждение будет верным, поскольку строчные буквы z уже сопоставлены с \w
Второй шаблон (\w{3,})(?<![a-z])\b
дает правильный результат при первой попытке сопоставления3 или более слова, и после этого утверждается с использованием отрицательного взгляда за (?<!
, то, что непосредственно слева, не является строчным символом az.
Если вы хотите использовать обходной взгляд, вы можете сделатьшаблон немного более эффективен, используя границу слова в начале.
В конце шаблона поместите отрицательный взгляд за границей слова, чтобы сначала закрепить его, а затем выполнить утверждение.
\b\w{3,}\b(?<![a-z])
Обратите внимание , что вы можете опустить группу захвата, если вы хотите только одно совпадение.