Уроки модуля (4/4)
Обзор на практике
Давайте объединим все четыре формы осмотра в реальных сценариях. Обзоры хороши, когда вам нужно:
- Извлеките значение без контекста, который его идентифицирует.
- Проверьте строку на соответствие нескольким независимым условиям.
- Фильтровать совпадения, которые удовлетворяют одним условиям, но не удовлетворяют другим.
Проверка пароля
Pattern: ^(?=.*[A-Z])(?=.*\d)(?=.*[^a-zA-Z\d]).{8,}$
Checks:
- at least one uppercase (?=.*[A-Z])
- at least one digit (?=.*\d)
- at least one symbol (?=.*[^a-zA-Z\d])
- minimum length 8 .{8,}При каждом предварительном просмотре проверяется одно условие, начиная с начала (^). Они
все с нулевой шириной: двигатель остается в положении 0, а затем потребляет с
.{8,}$.
Извлечение между разделителями
Pattern: (?<=\().+?(?=\))
Sample: Funzione foo(bar) e baz(qux, qix)
Match: "bar", "quux, qix" (without parentheses)Просмотр назад + просмотр вперед + ленивый квантификатор: извлекает содержимое ** внутри скобки**, не включая их.
Сочетание просмотра вперед и просмотра назад
Совместное использование просмотра вперед и назад позволяет изолировать строки, находящиеся внутри определенных тегов или форматов (например, извлечение текста между двумя тегами без включения тегов в окончательное совпадение). Это позволяет избежать последующих операций очистки строки.
Попробуйте это
Извлеките значение каждого присвоения `key=value` из журнала: ТОЛЬКО значения (без ключей, без `=`). Значения могут содержать буквы и цифры.
Показать подсказку
Переместите `=` внутри просмотра (?<==): таким образом совпадение будет содержать только значение.
Решение доступно после 3 попыток
Обзор упражнения
Найдите, в каких словах есть хотя бы ОДНА заглавная буква И хотя бы ОДНА цифра (в любом порядке), расположив их в тексте.
Показать подсказку
Двойной просмотр вперед в начале: (?=\\w*[A-Z])(?=\\w*\\d). Затем используйте слово с помощью \\w+.
Решение доступно после 3 попыток
Дополнительная задача
Extract only numerical digits that are enclosed exactly between parentheses, e.g. extract `102` from `(102)` without capturing the parentheses.
Показать подсказку
Combine a positive lookbehind (?<=\( ) for the open parenthesis and a positive lookahead (?=\) ) for the closed one.
Решение доступно после 3 попыток