Перейти до основного вмісту
Модуль 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 спроб