ToolHub
View All Posts

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:

MetaznakZnaczeniePrzykład
.Dowolny pojedynczy znaka.c pasuje do abc, a1c, a c
*Poprzedni znak zero lub więcej razyab*c pasuje do ac, abc, abbc
+Poprzedni znak jeden lub więcej razyab+c pasuje do abc, abbc
?Poprzedni znak zero lub jeden razcolou?r pasuje do color, colour
^Początek stringa^Hello pasuje do Hello na początku
$Koniec stringaworld$ 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
\dCyfra [0-9]\d{3} pasuje do 123
\wZnak słowa [a-zA-Z0-9_]\w+ pasuje do hello_123
\sBiały znaka\sb pasuje do a b

1. Walidacja adresu e-mail

Podstawowy wzorzec e-mail

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

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

Ważna uwaga: Żaden regex nie może doskonale zweryfikować wszystkich poprawnych adresów e-mail zgodnie z RFC 5322. Użyj tego wzorca do podstawowego sprawdzenia formatu, a następnie zweryfikuj adres, wysyłając e-mail potwierdzający. W aplikacjach produkcyjnych połącz walidację regex z weryfikacją domeny.

2. Walidacja URL

Wzorzec URL HTTP/HTTPS

^https?:\/\/(www\.)?[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(\/[^\s]*)?$

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

^\+?[1-9]\d{1,14}$

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

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

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

^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$

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)

^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$

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

^#(?:[0-9a-fA-F]{3}){1,2}$

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

^[a-z0-9]+(?:-[a-z0-9]+)*$

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

^(?:4\d{12}(?:\d{3})?|5[1-5]\d{14}|3[47]\d{13}|6(?:011|5\d{2})\d{12})$

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

<([a-z][a-z0-9]*)\b[^>]*>(.*?)<\/\1>

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

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 regularne

FAQ

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.