Wszystkie artykuły

Wyrażenia regularne: podstawowa składnia i typowe wzorce

Wyrażenie regularne (regex) to zwięzły sposób opisania wzorca tekstu — nie konkretnego ciągu znaków, lecz reguły, którą ciąg musi spełniać. Zamiast przechodzić po znakach w pętli, jednym wyrażeniem można sprawdzić lub znaleźć złożoną strukturę.

Podstawowe elementy

  • Klasy znaków\d (cyfra), \w (litera/cyfra/podkreślenie), \s (biały znak), lub własna klasa jak [a-zA-Z].
  • Kwantyfikatory* (0 lub więcej), + (1 lub więcej), ? (0 lub 1), {2,5} (od 2 do 5 razy).
  • Grupy przechwytujące — nawiasy (...) wyodrębniają fragment dopasowania, który można potem wykorzystać osobno, np. przy zamianie.
  • Kotwice^ i $ przypinają wzorzec do początku lub końca linii.

Dlaczego \w nie widzi polskich liter

W silniku wyrażeń regularnych JavaScript, na którym działa to narzędzie, \w zawsze oznacza wyłącznie [A-Za-z0-9_] — litery ASCII, cyfry i podkreślenie. Polskie znaki diakrytyczne ą, ć, ę, ł, ń, ó, ś, ź, ż wykraczają poza ten zakres, więc /^\w+$/.test('łódź') zwróci false już na pierwszej literze. Dodanie flagi u tego nie zmienia — nie rozszerza ona definicji \w. Żeby poprawnie dopasować polski tekst z polskimi znakami, trzeba jawnie użyć klasy opartej na właściwościach Unicode, np. /^\p{L}+$/u, czyli „dowolna litera" dostępna tylko razem z flagą u.

Dopasowanie zachłanne kontra leniwe

Domyślnie kwantyfikatory są „zachłanne" — starają się dopasować jak najwięcej znaków, wycofując się tylko wtedy, gdy uniemożliwia to znalezienie dopasowania. Na przykład <.+> zastosowane do <a>text</a> dopasuje wszystko od pierwszego < do ostatniego >. Dodanie ? po kwantyfikatorze (<.+?>) czyni go „leniwym" — dopasowuje jak najmniej, zatrzymując się na pierwszym możliwym dopasowaniu.

Do czego to się przydaje

  • Walidacja formatu danych wejściowych (e-mail, numer telefonu, kod pocztowy).
  • Wyszukiwanie i masowa zamiana tekstu na podstawie wzorca, a nie dokładnego dopasowania.
  • Wyodrębnianie danych strukturalnych z logów lub niesformatowanego tekstu.

Katastrofalny backtracking

Zagnieżdżone kwantyfikatory, takie jak (a+)+, mogą przy określonych danych wejściowych zmusić silnik regex do sprawdzenia wykładniczej liczby kombinacji, zanim uzna, że dopasowania nie ma — strona lub serwer „zawiesza się" na pozornie prostym wyrażeniu. To realna klasa podatności (ReDoS), dlatego złożone zagnieżdżone kwantyfikatory warto testować na długich, „prawie pasujących" ciągach, a nie tylko na oczekiwanych przykładach.

Wypróbuj narzędzie