Przejdź do głównej treści
eLearner.app
Moduł 1 · Lekcja 3 z 43/32 w kursie~8 min
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).

Code
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.

Code
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

Ćwiczenie#regex.m1.l3.e1
Próby: 0Ładowanie...

Znajdź każdy tryplet znaków ograniczony nawiasami, np. `(abc)`, `(xyz)`. Użyj kropki jako znaku wieloznacznego dla 3 wewnętrznych znaków.

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

Ćwiczenie#regex.m1.l3.e2
Próby: 0Ładowanie...

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).

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

Ćwiczenie#regex.m1.l3.e3
Próby: 0Ładowanie...

Znajdź wszystkie 3-znakowe sekwencje zaczynające się od `c` i kończące się na `t` (np. `cat`, `cot`, `c-t`).

Ładowanie edytora...
Pokaż wskazówkę

Wzorzec wykorzystuje kropkę '.', aby zastąpić znak wieloznaczny w środku.

Rozwiązanie dostępne po 3 próbach