Перейти к основному содержимому
Модуль 6 · Урок 2 из 422/32 в курсе~10 min
Уроки модуля (2/4)

Отрицательный прогноз: `(?!...)`

Негативный просмотр вперед (?!...) — это темная сестра положительного просмотра вперед: для этого требуется, чтобы данный шаблон НЕ следовал за текущей позицией. Это по-прежнему нулевая ширина: ни один символ не используется.

Code
Pattern: \d+(?! euro)
Sample:  Prezzo 100 euro, sconto 25 euro, totale 75 dollari.
                                          ^^

Соответствует только 75, поскольку это единственная последовательность цифр, за которой НЕ следует euro. За цифрами 100 и 25 следует euro и они исключено.

Типичные шаблоны негативного прогноза

  • ^(?!.*errore).*$ -- строка, НЕ содержащая слова "errore".
  • \b(?!the\b)\w+\b – слово, отличное от the.
  • (?!\s) -- текущая позиция НЕ является пробелом (полезно в качестве «обрезки»).
Code
Pattern: ^(?!.*\.bak$).*$
Sample (multiline with flag m):
  foto.jpg
  backup.bak
  documento.txt
Match: foto.jpg, documento.txt (excludes backup.bak)

Расширенные исключения с помощью негативного прогноза

Отрицательный просмотр (?!...) необходим для реализации логики исключения (например, для проверки того, что пароль не содержит словарных слов или что идентификатор не является зарезервированным ключевым словом, например class или function).

Попробуйте это

Упражнение#regex.m6.l2.e1
Попыток: 0Загрузка…

Найдите все числа, за которыми НЕ следует «евро» (исключая цены в евро).

Загрузка редактора…
Показать подсказку

Используйте (?! ...), чтобы сказать «НЕ должен следовать». Последовательность `евро` не должна появляться после.

Решение доступно после 3 попыток

Обзор упражнения

Упражнение#regex.m6.l2.e2
Попыток: 0Загрузка…

Найдите каждое слово, состоящее как минимум из 3 букв, которое НЕ является «the» (без учета регистра).

Загрузка редактора…
Показать подсказку

Сразу после \\b откройте отрицательный просмотр вперед (?!the\\b), исключающий только слово the.

Решение доступно после 3 попыток

Дополнительная задача

Упражнение#regex.m6.l2.e3
Попыток: 0Загрузка…

Find all words consisting of letters that do not contain the letter `x` at any position (e.g. match `test`, `game` but not `extra`, `box`).

Загрузка редактора…
Показать подсказку

Используйте отрицательный просмотр вперед (?!\\w*x) сразу после границы слова \\b.

Решение доступно после 3 попыток