Модульні уроки (2/4)
Негативний перегляд: `(?!...)`
Негативний прогноз (?!...) є темною сестрою позитивного прогнозу:
це вимагає, щоб заданий шаблон НЕ відповідав поточній позиції. Це так
все ще нульова ширина: символи не споживаються.
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)-- поточна позиція НЕ є пробілом (корисно як "обрізка").
Pattern: ^(?!.*\.bak$).*$
Sample (multiline with flag m):
foto.jpg
backup.bak
documento.txt
Match: foto.jpg, documento.txt (excludes backup.bak)Розширені виключення через негативний прогноз
Негативний попередній перегляд (?!...) важливий для реалізації логіки виключення (наприклад, перевірки того, що пароль не містить словникових слів або що ідентифікатор не є зарезервованим ключовим словом, наприклад class або function).
Спробуйте
Знайдіть кожне число, за яким не стоїть «євро» (тож виключаючи ціни в євро).
Показати підказку
Використовуйте (?! ...), щоб сказати "НЕ слід слідувати". Послідовність "євро" не повинна з'являтися після.
Рішення доступне після 3 спроб
Повторна вправа
Знайдіть кожне слово з принаймні 3 літер, яке НЕ є "the" (незалежно від регістру).
Показати підказку
Відразу після \\b відкрийте негативний перегляд (?!the\\b), який виключає лише слово the.
Рішення доступне після 3 спроб
Додатковий виклик
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 спроб