Nauka regex od podstaw — interaktywny kurs wyrażeń regularnych
Wyrażenia regularne są znane ze stromej krzywej uczenia — wiele osób jest zniechęconych na widok wzorców jak `^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}`. Ale nie musi tak być! Regex, jak każdy język, uczy się krok po kroku. W tym artykule przeprowadzimy Cię od absolutnych podstaw do średniozaawansowanych wzorców, z ćwiczeniami które możesz przetestować bezpośrednio w narzędziu Tester Regex na WikiPlus. Po przeczytaniu będziesz gotowy pisać i rozumieć regex dla codziennych zadań.
Poziom 1: Literały i podstawowe klasy znaków
Zacznijmy od absolutnych podstaw. Wyrażenie regularne może być po prostu literałem — wzorzec `kot` dopasuje słowo 'kot' wszędzie gdzie wystąpi w tekście. Już to jest użyteczne do zwykłego wyszukiwania. Ale moc regex zaczyna się przy klasach znaków. Klasa znaków [abc] dopasowuje jeden znak: a, b lub c. [a-z] — dowolna mała litera. [A-Z] — wielka litera. [0-9] — cyfra. [a-zA-Z0-9] — litera lub cyfra. Negacja w klasie: [^abc] — wszystko oprócz a, b, c. Skrótowe klasy: \d to [0-9], \w to [a-zA-Z0-9_], \s to spacja/tab/nowa linia. Ich negacje: \D (nie-cyfra), \W (nie-znak-słowny), \S (nie-biały-znak). Ćwiczenie 1: napisz regex, który dopasowuje dowolną polską cyfrę. Ćwiczenie 2: napisz regex dopasowujący wielką literę.
Poziom 2: Kwantyfikatory i kotwice
Kwantyfikatory określają, ile razy poprzedni element ma się powtórzyć. ? — 0 lub 1 raz (element opcjonalny). * — 0 lub więcej razy. + — 1 lub więcej razy. {n} — dokładnie n razy. {n,} — co najmniej n razy. {n,m} — od n do m razy. Przykład: `\d{3}-\d{2}-\d{2}` dopasuje format 123-45-67. Kotwice zakotwiczają dopasowanie do pozycji: ^ — początek ciągu/linii. $ — koniec ciągu/linii. \b — granica słowa (przejście między \w a \W). Ćwiczenie 3: napisz regex dopasowujący ciąg złożony z 5 cyfr. Wskazówka: `^\d{5}$`. Ćwiczenie 4: znajdź wszystkie słowa zaczynające się na wielką literę. Wskazówka: `\b[A-ZŁŚÓĄŹĆĘŃ][a-ząęółśźćń]*\b`.
Poziom 3: Grupy i alternacja
Grupy i alternacja to narzędzia do budowania bardziej złożonych wzorców. Grupy przechwytujące (): traktują fragment regex jako jednostkę i zapamiętują dopasowanie. `(ab)+` dopasuje 'ab', 'abab', 'ababab'. Grupy nieprzechwytujące (?:): grupują bez zapamiętywania — `(?:ab)+`. Alternacja | — oznacza 'lub': `kot|pies` dopasuje 'kot' albo 'pies'. Z grupą: `(kot|pies)s?` dopasuje 'kot', 'koty', 'pies', 'psy'... no, prawie: `(kot|pies)y?`. Alternacja ma najniższy priorytet — `szary kot|pies` to `(szary kot)|(pies)`, nie `szary (kot|pies)`. Używaj grup dla precyzji. Ćwiczenie 5: napisz regex, który dopasowuje 'kolor' lub 'colour'. Ćwiczenie 6: dopasuj numer telefonu w formacie 500-100-200 lub 500 100 200 (dywiz lub spacja jako separator).
Poziom 4: Lookahead, lookbehind i asercje zerowej szerokości
To poziom zaawansowany, ale otwiera całkowicie nowe możliwości. Asercje zerowej szerokości sprawdzają kontekst bez konsumowania znaków. Positive lookahead (?=X): dopasuj coś, co jest poprzedzone czymś innym — ale ten kontekst nie jest częścią dopasowania. Przykład: `\d+(?= zł)` dopasuje liczbę przed ' zł', ale samo ' zł' nie będzie w dopasowaniu. Negative lookahead (?!X): `\bfree\b(?!\s+range)` — słowo 'free' niezapowiedziane przez ' range'. Positive lookbehind (?<=X): `(?<=@)\w+` — słowo po znaku @. Negative lookbehind (?<!X): `(?<!\d)\d{4}(?!\d)` — czteroznakowy rok (4 cyfry) nieotoczony innymi cyframi. Ćwiczenie 7: napisz regex, który dopasowuje ceny — liczby po których następuje ' PLN' lub ' zł', ale bez samej jednostki w dopasowaniu.
Często zadawane pytania
- Jak długo zajmuje nauka regex?
- Podstawy (literały, klasy, kwantyfikatory, kotwice) można opanować w kilka godzin. Biegłość w pisaniu złożonych wzorców wymaga miesięcy praktyki. Kluczem jest regularne ćwiczenie na realnych problemach — każdy raz gdy piszesz pętlę do parsowania tekstu, zastanów się czy regex by nie wystarczył.
- Jakie zasoby polecasz do nauki regex po polsku?
- Tester online (jak WikiPlus) do ćwiczeń to numer jeden. regexr.com ma świetne wbudowane wyjaśnienia każdego elementu. regex101.com z wybranym flavorem (JavaScript/Python/PHP) wyjaśnia każdy fragment wzorca. Książka 'Mastering Regular Expressions' (Jeffrey Friedl) to klasyk, dostępna po angielsku. Na YouTube wiele polskich tutoriali regex dla JS i Python.
- Kiedy NIE używać regex?
- Regex nie jest właściwy do parsowania HTML/XML/JSON (użyj dedykowanych parserów), do złożonej logiki biznesowej (użyj kodu), gdy wzorzec jest dłuższy niż ~80 znaków (rozważ podzielenie na kroki), gdy wydajność jest krytyczna na ogromnych zbiorach danych (rozważ indeksy bazy danych lub dedykowane algorytmy wyszukiwania).