Уроки модуля (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 попыток