Lekcje modułu (3/4)
Znak wieloznaczny: kropka `.`
Kropka . w wyrażeniach regularnych to znak wieloznaczny (wildcard): dopasowuje dowolny pojedynczy znak... z jednym ważnym wyjątkiem: NIE dopasowuje znaku nowej linii (\n).
Pattern: c.t
Sample: cat cot cut c@t c\nt
^^^ ^^^ ^^^ ^^^Trzy litery: c, dowolny znak, t. Brak znaku nowej linii pomiędzy nimi, więc c\nt nie jest dopasowywane (domyślnie).
Kropka jest niezwykle użyteczna, ale też niebezpieczna: używana bez dyscypliny przechwytuje więcej tekstu niż zamierzałeś. W połączeniu z kwantyfikatorami w module 2 (.*, .+?) jest źródłem 90% wzorców, które "nie działają tak, jak się spodziewałem".
Flaga s: "dotAll"
Z flagą s (zwaną również dotAll lub single-line) kropka dopasowuje każdy znak, w tym znak nowej linii. Przydatne do wyodrębniania bloków tekstu rozciągających się na wiele linii.
Pattern: <p>.*</p>
Flag: gs
Sample: <p>prima\nseconda</p>
^^^^^^^^^^^^^^^^^^^^^Ograniczenia i zachowanie znaku wieloznacznego kropki
Kropka . to potężny znak wieloznaczny, ale domyślnie nie dopasowuje znaków nowej linii (\n). Jeśli chcesz, aby kropka dopasowywała absolutnie wszystko, w tym znaki nowej linii, musisz włączyć flagę s (dotAll). Zachowaj ostrożność podczas łączenia kropki z kwantyfikatorami (.*), ponieważ ma ona tendencję do konsumowania zbyt dużej ilości tekstu (zachowanie zachłanne - greedy).
Spróbuj sam
Znajdź każdy tryplet znaków ograniczony nawiasami, np. `(abc)`, `(xyz)`. Użyj kropki jako znaku wieloznacznego dla 3 wewnętrznych znaków.
Pokaż wskazówkę
Trzy kropki dla trzech dowolnych znaków. Nawiasy są metaznakami: muszą być poprzedzone backslashem \.
Rozwiązanie dostępne po 3 próbach
Ćwiczenie powtórzeniowe
Wyodrębnij blok pomiędzy `[INIZIO]` a `[FINE]`, który może rozciągać się na wiele linii. Będziesz potrzebować flagi `s`, aby kropka dopasowywała znaki nowej linii, oraz leniwej (lazy) wersji kwantyfikatora (`.*?`, moduł 2).
Pokaż wskazówkę
Bez flagi s kropka zatrzymuje się na końcu linii: dodaj ją. Forma .*? (lazy) zatrzymuje dopasowanie na pierwszym [FINE].
Rozwiązanie dostępne po 3 próbach
Dodatkowe wyzwanie
Znajdź wszystkie 3-znakowe sekwencje zaczynające się od `c` i kończące się na `t` (np. `cat`, `cot`, `c-t`).
Pokaż wskazówkę
Wzorzec wykorzystuje kropkę '.', aby zastąpić znak wieloznaczny w środku.
Rozwiązanie dostępne po 3 próbach