Lekcje modułu (4/4)
Lookaround w praktyce
Połączmy wszystkie cztery formy lookaround w scenariuszach z życia wziętych. Lookaround sprawdzają się najlepiej, gdy musisz:
- Wyodrębnić wartość bez identyfikującego ją kontekstu.
- Zweryfikować ciąg znaków pod kątem wielu niezależnych warunków.
- Filtrować dopasowania spełniające jedne warunki, a niespełniające innych.
Walidacja hasła
Pattern: ^(?=.*[A-Z])(?=.*\d)(?=.*[^a-zA-Z\d]).{8,}$
Checks:
- co najmniej jedna wielka litera (?=.*[A-Z])
- co najmniej jedna cyfra (?=.*\d)
- co najmniej jeden symbol (?=.*[^a-zA-Z\d])
- minimalna długość 8 .{8,}Każde lookahead sprawdza jeden warunek, zaczynając od początku (^). Wszystkie mają zerową szerokość: silnik pozostaje na pozycji 0, a następnie konsumuje znaki za pomocą .{8,}$.
Wyodrębnianie pomiędzy ogranicznikami
Pattern: (?<=\().+?(?=\))
Sample: Funzione foo(bar) e baz(qux, qix)
Match: "bar", "quux, qix" (bez nawiasów)Lookbehind + lookahead + leniwy kwantyfikator: wyodrębnia zawartość wewnątrz nawiasów bez uwzględniania samych nawiasów.
Łączenie lookahead i lookbehind
Wspólne używanie lookahead i lookbehind pozwala na izolowanie ciągów znaków znajdujących się wewnątrz określonych tagów lub formatów (np. wyodrębnienie tekstu między dwoma tagami bez uwzględniania tagów w końcowym dopasowaniu). Pozwala to uniknąć późniejszych operacji oczyszczania ciągów znaków.
Spróbuj sam
Wyodrębnij wartość każdego przypisania `key=value` z logu: TYLKO wartości (bez kluczy, bez `=`). Wartości mogą zawierać litery i cyfry.
Pokaż wskazówkę
Przenieś `=` do wewnątrz lookbehind (?<==): w ten sposób dopasowanie będzie zawierać tylko wartość.
Rozwiązanie dostępne po 3 próbach
Ćwiczenie powtórzeniowe
Znajdź, które słowa mają co najmniej JEDNĄ wielką literę ORAZ co najmniej JEDNĄ cyfrę (w dowolnej kolejności), lokalizując je w tekście.
Pokaż wskazówkę
Podwójne lookahead na początku: (?=\w*[A-Z])(?=\w*\d). Następnie skonsumuj słowo za pomocą \w+.
Rozwiązanie dostępne po 3 próbach
Dodatkowe wyzwanie
Wyodrębnij tylko cyfry, które są dokładnie ujęte w nawiasy, np. wyodrębnij `102` z `(102)` bez przechwytywania nawiasów.
Pokaż wskazówkę
Połącz pozytywne lookbehind (?<=\( ) dla nawiasu otwierającego i pozytywne lookahead (?=\) ) dla nawiasu zamykającego.
Rozwiązanie dostępne po 3 próbach