narzedziaregexprogramowanie

Regex w praktyce - 10 przykładów, które przydają się na co dzień

Po co używać regex?

Wyrażenia regularne (Regular Expressions) to wzorce opisujące klasy tekstów — pozwalają znajdować, walidować i zamieniać fragmenty stringów w milisekundach. Przydają się w:

  • walidacji formularzy (email, NIP, PESEL)
  • analizie logów serwera
  • czyszczeniu danych z CSV/Excel
  • wyszukiwaniu w edytorze kodu (VS Code, Cursor)
  • skryptach Bash, Python, JavaScript

Waliduj PESEL w walidatorze PESEL, a numery kont w walidatorze konta bankowego — pod spodem często działają podobne reguły.

Podstawowe metaznaki

ZnakZnaczenie
.Dowolny znak (poza newline)
\dCyfra 0–9
\wZnak słowa (litera, cyfra, _)
\sBiały znak (spacja, tab)
+Jedno lub więcej
*Zero lub więcej
?Zero lub jeden
{n,m}Od n do m wystąpień
^Początek linii
$Koniec linii
[abc]Jeden z: a, b, c
(abc|def)abc LUB def

10 praktycznych przykładów

1. Email (uproszczony)

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

jan.kowalski@firma.pl
jan@firma (brak TLD)

2. Numer telefonu polski

^(\+48\s?)?(\d{3}[\s-]?\d{3}[\s-]?\d{3}|\d{2}[\s-]?\d{3}[\s-]?\d{2}[\s-]?\d{2})$

+48 600 123 456, 22-123-45-67

3. Kod pocztowy PL

^\d{2}-\d{3}$

00-001
00001

4. URL (http/https)

^https?://[\w.-]+(?:\.[\w.-]+)+[\w\-._~:/?#\[\]@!$&'()*+,;=.]*$

5. Usuwanie podwójnych spacji

Znajdź: \s{2,}
Zamień na: (pojedyncza spacja)

6. Podział po separatorze (CSV)

[,;\t]

Użyj w Python: re.split(r'[,;\t]', linia)

7. Ekstrakcja liczb z tekstu

-?\d+(?:[.,]\d+)?

Z tekstu „Cena: 1 234,56 zł" wyciągnie 1234,56.

8. Filtrowanie znaków specjalnych

[^a-zA-Z0-9ąćęłńóśźżĄĆĘŁŃÓŚŹŻ\s]

Usuwa wszystko poza literami, cyframi i spacją (polskie znaki uwzględnione).

9. Hasło — polityka bezpieczeństwa

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{12,}$

Min. 12 znaków, wielka, mała, cyfra, symbol. Wygeneruj hasło w generatorze haseł — więcej w silnych hasłach.

10. Zamiana w wielu liniach

Znajdź: ^(\d+)\. (.+)$
Zamień: - $2 ($1)

1. Element- Element (1)

Grupy przechwytujące

Nawiasy () tworzą grupy — można odwołać się do nich w zamianie:

(\d{4})-(\d{2})-(\d{2})

Zamiana $3.$2.$1 zamieni 2026-06-27 na 27.06.2026. Przydatne przy timestamp Unix.

Flagi regex

FlagaZnaczenie
iIgnoruj wielkość liter
mMultiline (^ i $ per linia)
gGlobal (wszystkie dopasowania)
s. obejmuje newline

Regex w popularnych narzędziach

NarzędzieUżycie
VS Code / CursorCtrl+H, włącz ikonę .*
grep / ripgreprg "pattern" plik.txt
Pythonimport re; re.findall(...)
JavaScriptstr.match(/pattern/g)
ExcelOgraniczone — lepiej Power Query

Kiedy regex NIE jest najlepszy?

SytuacjaLepsze rozwiązanie
Parsowanie HTML/XMLParser DOM (BeautifulSoup)
JSONJSON.parse()
Złożone datyBiblioteka datetime
Walidacja PESEL/NIPDedykowany algorytm z sumą kontrolną

Regex do HTML to klasyczny antywzorzec — struktura zagnieżdżona wymaga parsera.

Typowe pułapki

  • Zbyt chciwy .* — użyj .*? (non-greedy) lub konkretnych klas
  • Brak kotwic ^ `$ — dopasowanie fragmentu zamiast całości
  • Polskie znaki — upewnij się, że encoding to UTF-8
  • Backslash w Pythonie — surowe stringi r"\d+" zamiast "\\d+"

Testowanie regex

  1. regex101.com — debugger z wyjaśnieniem
  2. Testuj na realnych danych (100+ wierszy)
  3. Sprawdź przypadki brzegowe: pusty string, bardzo długi, znaki Unicode

Regex a bezpieczeństwo

Walidacja po stronie klienta (regex w formularzu) nie zastępuje walidacji serwerowej. Atakujący może ominąć frontend. Regex w polityce haseł to minimum — hasła hashuj bcrypt/Argon2 (haszowanie haseł).

Przykład: czyszczenie listy emaili

Wejście:

jan@test.pl; anna@test.pl , błędny-email piotr@test.pl

Regex: [\w.-]+@[\w.-]+\.\w+
Wynik: 3 poprawne adresy.

Przykład: logi serwera — wyciąganie IP

^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})

Z linii Apache: 192.168.1.1 - - [27/Jun/2026] "GET / HTTP/1.1" 200

Powiązane artykuły

Podsumowanie

Regex to potężne narzędzie do walidacji i transformacji tekstu. Zacznij od prostych wzorców (^\d{2}-\d{3}$ dla kodu pocztowego), testuj na regex101 i unikaj nadmiernej złożoności. Przy danych strukturalnych sięgaj po dedykowane parsery.