Wzorce wyrażeń regularnych, które każdy programista powinien znać
Wyrażenia regularne (regex) są jednymi z najpotężniejszych narzędzi w zestawie programisty. Pozwalają wyszukiwać, walidować i przekształcać tekst za pomocą zwięzłych wzorców, które wymagałyby dziesiątek linii kodu proceduralnego. Choć składnia regex może na pierwszy rzut oka wydawać się niejasna, opanowanie zestawu podstawowych wzorców pokrywa zdecydowaną większość rzeczywistych przypadków użycia. Ten przewodnik przedstawia wzorce wyrażeń regularnych, których będziesz używać wielokrotnie, ze szczegółowym wyjaśnieniem działania każdego z nich.
Przegląd podstaw wyrażeń regularnych
Zanim zagłębimy się w konkretne wzorce, oto szybkie przypomnienie metaznaków stanowiących podstawę wszystkich wzorców wyrażeń regularnych:
| Metaznak | Znaczenie | Przykład |
|---|---|---|
| . | Dowolny pojedynczy znak | a.c pasuje do abc, a1c, a c |
| * | Poprzedni znak zero lub więcej razy | ab*c pasuje do ac, abc, abbc |
| + | Poprzedni znak jeden lub więcej razy | ab+c pasuje do abc, abbc |
| ? | Poprzedni znak zero lub jeden raz | colou?r pasuje do color, colour |
| ^ | Początek stringa | ^Hello pasuje do Hello na początku |
| $ | Koniec stringa | world$ pasuje do world na końcu |
| [] | Klasa znaków | [aeiou] pasuje do dowolnej samogłoski |
| () | Grupa przechwytuj\u0105ca | (ab)+ dopasowuje ab, abab |
| | | Alternacja (lub) | cat|dog pasuje do cat lub dog |
| \d | Cyfra [0-9] | \d{3} pasuje do 123 |
| \w | Znak słowa [a-zA-Z0-9_] | \w+ pasuje do hello_123 |
| \s | Biały znak | a\sb pasuje do a b |
1. Walidacja adresu e-mail
Podstawowy wzorzec e-mail
Ten wzorzec waliduje podstawową strukturę adresu e-mail: jeden lub więcej dozwolonych znaków przed @, po których następuje nazwa domeny zawierająca co najmniej jedną kropkę, oraz TLD o długości co najmniej dwóch liter. Wychwytuje większość nieprawidłowych formatów, przepuszczając jednocześnie prawidłowe adresy.
Dopasowuje: user@example.com, john.doe+tag@company.co.uk
Nie pasuje: user@, @example.com, user@.com
2. Walidacja URL
Wzorzec URL HTTP/HTTPS
Ten wzorzec dopasowuje URL HTTP i HTTPS z opcjonalnym prefiksem www, zawierające nazwę domeny i opcjonalną ścieżkę. s? czyni "s" w https opcjonalnym, (www\.)? czyni prefiks www opcjonalnym. Segment ścieżki (\/[^\s]*)? pozwala na dowolne znaki oprócz białych znaków po nazwie domeny.
Dopasowuje: https://example.com, http://www.example.com/path/to/page
Nie pasuje: ftp://example.com, example.com (bez protokołu)
3. Walidacja numeru telefonu
Międzynarodowy numer telefonu
Ten wzorzec jest zgodny z formatem międzynarodowego numeru telefonu E.164. Umożliwia opcjonalny prefiks +, wymaga, aby pierwsza cyfra była 1-9 (bez zer wiodących), i pozwala na maksymalnie 15 cyfr. Jest to najbardziej niezawodny format do przechowywania i walidacji numerów telefonów na arenie międzynarodowej.
Dopasowuje: +14155552671, 442071838750
Nie pasuje: +01xxxxxxxxx, 123
4. Siła hasła
Wzorzec silnego hasła
Ten wzorzec wymusza politykę silnych haseł: co najmniej 8 znaków, zawierających co najmniej jedną małą literę, jedną wielką literę, jedną cyfrę i jeden znak specjalny. Składnia (?=.*[...]) używa pozytywnego lookahead do sprawdzania obecności każdego typu znaku bez konsumowania znaków.
Dopasowuje: MyP@ss1word, Str0ng!Pass
Nie pasuje: password, Password1, P@ss
5. Walidacja adresu IP
Adres IPv4
Ten wzorzec waliduje adresy IPv4 z prawidłowym sprawdzaniem zakresu. Każdy oktet musi mieścić się w zakresie od 0 do 255. Wzorzec używa alternacji do dopasowania: 250-255 (25[0-5]), 200-249 (2[0-4]\d) lub 0-199 ([01]?\d\d?). Jest to powtarzane trzy razy po kropce, a następnie ostatni raz dla końcowego oktetu.
Dopasowuje: 192.168.1.1, 10.0.0.1, 255.255.255.0
Nie pasuje: 256.1.1.1, 192.168.1, 192.168.1.1.1
6. Walidacja formatu daty
YYYY-MM-DD (ISO 8601)
Ten wzorzec waliduje daty w formacie ISO 8601 (RRRR-MM-DD). Sprawdza czterocyfrowy rok, miesiące między 01-12 i dni między 01-31. Zauważ, że ten wzorzec waliduje format, ale nie sprawdza logicznej poprawności daty (np. dopuszcza 2026-02-31). Dla pełnej walidacji przetwórz datę i sprawdź programistycznie.
Dopasowuje: 2026-05-20, 2025-01-01, 2024-12-31
Nie pasuje: 2026-5-20, 2026-13-01, 26-05-20
7. Szesnastkowy kod koloru
Szesnastkowe kolory CSS
Ten wzorzec dopasowuje szesnastkowe kody kolorów CSS, w tym 3-cyfrowe skrócone (#fff) i 6-cyfrowe pełne (#ffffff). Kwantyfikator {1,2} pozwala na 1 lub 2 powtórzenia 3-cyfrowej grupy szesnastkowej, obsługując oba formaty.
Dopasowuje: #fff, #FF5733, #1e293b
Nie pasuje: fff, #ff, #1234567
8. Slug / string bezpieczny dla URL
Wzorzec URL Slug
Ten wzorzec waliduje URL slug: małe litery i cyfry oddzielone myślnikami. Zapewnia brak wiodących lub końcowych myślników oraz brak kolejnych myślników. Ten format jest przyjazny dla SEO i bezpieczny do użycia w URL, nazwach plików i identyfikatorach.
Dopasowuje: my-blog-post, regex-patterns-guide, tool123
Nie pasuje: My-Post, -slug, slug-, my--post
9. Numer karty kredytowej
Uniwersalny wzorzec karty kredytowej
Ten wzorzec waliduje numery głównych kart kredytowych: Visa (zaczyna się od 4, 13 lub 16 cyfr), Mastercard (zaczyna się od 51-55, 16 cyfr), American Express (zaczyna się od 34 lub 37, 15 cyfr) i Discover (zaczyna się od 6011 lub 65, 16 cyfr). Połącz to z algorytmem Luhna dla pełnej walidacji.
10. Dopasowywanie znaczników HTML
Wyodrębnianie znaczników HTML
Ten wzorzec dopasowuje otwierające i zamykające znaczniki HTML z zawartością. Pierwsza grupa przechwytująca ([a-z][a-z0-9]*) przechwytuje nazwę znacznika, a odwołanie wsteczne \1 zapewnia, że znacznik zamykający pasuje do otwierającego. (.*?) używa leniwego dopasowania do przechwycenia zawartości między znacznikami dla najkrótszego dopasowania.
Wskazówki dotyczące pisania lepszych wyrażeń regularnych
- Zacznij od prostoty: Najpierw napisz najbardziej podstawową wersję wzorca, a następnie stopniowo dodawaj złożoność. Testuj na każdym kroku.
- Używaj klas znaków: [a-z] jest czytelniejsze niż (a|b|c|...|z). Nazwane klasy, takie jak \d, \w i \s, poprawiają czytelność.
- Preferuj kwantyfikatory leniwe: Gdy potrzebujesz najkrótszego dopasowania, używaj *? i +? zamiast * i +, aby uniknąć nadmiernego dopasowania zachłannego.
- Używaj kotwic: Zawsze używaj ^ i $ we wzorcach walidacyjnych, aby upewnić się, że dopasowany jest cały string, a nie tylko podciąg.
- Unikaj katastrofalnego backtrackingu: Zagnieżdżone kwantyfikatory, takie jak (a+)+, mogą powodować wykładniczą złożoność czasową dla niektórych danych wejściowych. Używaj grup atomowych lub kwantyfikatorów zaborczych, gdy są dostępne.
- Komentuj złożone wzorce: Używaj flagi x (tryb rozszerzony), aby dodawać spacje i komentarze do złożonych wzorców.
Chcesz interaktywnie przetestować te wzorce wyrażeń regularnych? Wypróbuj nasze darmowe narzędzie do testowania regex z dopasowaniem w czasie rzeczywistym, wizualizacją grup przechwytujących i wyjaśnianiem wzorców.
Testuj wyrażenie regularneFAQ
Czym jest wzorzec wyrażenia regularnego?
Wzorzec wyrażenia regularnego to sekwencja znaków definiująca wzorzec wyszukiwania. Jest używany do dopasowywania stringów, walidacji, operacji wyszukiwania i zastępowania oraz parsowania tekstu. Wzorce regex używają specjalnych metaznaków, takich jak ., *, +, ?, [], () i {}, do definiowania elastycznych reguł dopasowania.
Czy powinienem używać regex do walidacji e-mail?
Używaj wyrażeń regularnych do podstawowej walidacji formatu e-mail (sprawdzanie symbolu @, struktury domeny), ale nie próbuj w pełni walidować adresów e-mail wyłącznie za pomocą regex. Specyfikacja e-mail (RFC 5322) jest niezwykle złożona i żaden regex nie może doskonale zweryfikować wszystkich poprawnych adresów. W środowisku produkcyjnym połącz podstawową walidację regex z rzeczywistą weryfikacją e-mail (wysyłanie linku potwierdzającego).
Jaka jest różnica między kwantyfikatorami zachłannymi a leniwymi?
Kwantyfikatory zachłanne (*, +) dopasowują jak najwięcej tekstu, podczas gdy kwantyfikatory leniwe (*?, +?) dopasowują jak najmniej tekstu. Na przykład, zastosowane do 'aabb', zachłanne a.*b dopasowuje 'aabb' (cały string), podczas gdy leniwe a.*?b dopasowuje tylko 'aab' (najkrótsze dopasowanie).
Jak testować wzorce wyrażeń regularnych?
Używaj internetowych testerów wyrażeń regularnych (takich jak tester regex ToolHub), aby interaktywnie testować wzorce. Narzędzia te podświetlają dopasowania w czasie rzeczywistym, pokazują grupy przechwytujące i wyjaśniają funkcję każdej części wzorca.
Czy regex działa tak samo w różnych językach programowania?
Większość składni wyrażeń regularnych jest wspólna dla różnych języków, ale zaawansowane funkcje różnią się. JavaScript nie obsługuje asercji lookbehind w starszych silnikach, Python używa innej składni nazwanych grup niż JavaScript, a PCRE (PHP) obsługuje więcej funkcji niż większość innych silników. Zawsze testuj wzorce w języku docelowym.