Lekcje modułu (1/4)
Dodatnie lookahead: `(?=...)`
Pozytywne lookahead (?=...) (wybieganie w przód) to asercja o zerowej szerokości (zero-width):
sprawdza, czy określony wzorzec występuje po bieżącej pozycji, ale nie konsumuje tych znaków.
Pattern: \d+(?= euro)
Sample: Prezzo 100 euro, sconto 25 euro, totale 75 dollari.
^^^ ^^Lookahead (?= euro) wymaga, aby po cyfrach następowało euro, ale dopasowanie obejmuje tylko cyfry. 75 dollari nie pasuje (brak euro).
Dlaczego "zerowa szerokość"
Pomyśl o lookahead jak o warunku dotyczącym pozycji, a nie jak o części dopasowania:
- Dopasowanie zatrzymuje się przed lookahead.
- Pozycja "po dopasowaniu" to początek tekstu sprawdzanego przez lookahead.
- Kolejna próba dopasowania z flagą
grozpocznie się od tego miejsca.
Dzięki temu idealnie nadaje się do wyodrębniania wartości bez ich kontekstu: cen bez waluty, słów przed znakiem interpunkcyjnym itp.
Funkcje lookahead i skanowanie o zerowej szerokości
Pozytywne lookahead (?=...) gwarantuje, że określony wzorzec występuje po bieżącym punkcie, ale skanowanie jest wznawiane od pozycji przed lookahead. Zapobiega to "konsumowaniu" części tekstu, które mogą być potrzebne do kolejnych dopasowań.
Spróbuj sam
Wyodrębnij TYLKO cyfry cen w euro (sekwencje cyfr, po których następuje ' euro'). Brak waluty w dopasowaniu.
Pokaż wskazówkę
Przenieś ' euro' do wewnątrz lookahead (?= euro): ciąg znaków nie będzie częścią dopasowania.
Rozwiązanie dostępne po 3 próbach
Ćwiczenie powtórzeniowe
Znajdź każde słowo, po którym bezpośrednio następuje dwukropek `:` (ale bez uwzględniania dwukropka w dopasowaniu).
Pokaż wskazówkę
Ta sama logika: `:` nie znajduje się w dopasowaniu, ale jest warunkiem pozycji.
Rozwiązanie dostępne po 3 próbach
Dodatkowe wyzwanie
Znajdź każde słowo (np. nazwę funkcji), po którym bezpośrednio następuje nawias otwierający `(`, wykluczając nawias z dopasowania.
Pokaż wskazówkę
Przenieś \( (escapowany nawias otwierający) do wewnątrz pozytywnego lookahead (?=...).
Rozwiązanie dostępne po 3 próbach