Przejdź do głównej treści
eLearner.app
Moduł 6 · Lekcja 4 z 424/32 w kursie~12 min
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:

  1. Wyodrębnić wartość bez identyfikującego ją kontekstu.
  2. Zweryfikować ciąg znaków pod kątem wielu niezależnych warunków.
  3. Filtrować dopasowania spełniające jedne warunki, a niespełniające innych.

Walidacja hasła

Code
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

Code
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

Ćwiczenie#regex.m6.l4.e1
Próby: 0Ładowanie...

Wyodrębnij wartość każdego przypisania `key=value` z logu: TYLKO wartości (bez kluczy, bez `=`). Wartości mogą zawierać litery i cyfry.

Ładowanie edytora...
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

Ćwiczenie#regex.m6.l4.e2
Próby: 0Ładowanie...

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.

Ładowanie edytora...
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

Ćwiczenie#regex.m6.l4.e3
Próby: 0Ładowanie...

Wyodrębnij tylko cyfry, które są dokładnie ujęte w nawiasy, np. wyodrębnij `102` z `(102)` bez przechwytywania nawiasów.

Ładowanie edytora...
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