Ściągawka wyrażeń regularnych i popularne wzorce
Wyrażenia regularne, czyli regex, to potężne narzędzia dopasowywania wzorców używane w prawie każdym języku programowania i edytorze tekstu. Choć składnia może na pierwszy rzut oka wydawać się niejasna, opanowanie wyrażeń regularnych pozwala wyszukiwać, walidować, wyodrębniać i przekształcać tekst z precyzją, która wymagałaby dziesiątek linii kodu proceduralnego. Ten przewodnik obejmuje podstawową składnię, popularne wzorce i praktyczne wskazówki, które musisz znać.
Ściągawka podstawowej składni wyrażeń regularnych
Klasy znaków
| Wzorzec | Znaczenie | Przykład |
|---|---|---|
| . | Dowolny znak oprócz nowej linii | a.c pasuje do abc, a1c, a c |
| \d | Dowolna cyfra (0-9) | \d\d pasuje do 42 |
| \D | Dowolny znak niebędący cyfrą | \D pasuje do a, !, spacji |
| \w | Znak słowa (a-z, A-Z, 0-9, _) | \w+ pasuje do hello_123 |
| \W | Znak niebędący znakiem słowa | \W pasuje do @, #, spacji |
| \s | Biały znak (spacja, tabulator, nowa linia) | a\sb pasuje do a b |
| \S | Znak niebędący białym znakiem | \S+ pasuje do hello |
| [abc] | Dowolny znak ze zbioru | [aeiou] pasuje do samogłosek |
| [^abc] | Dowolny znak spoza zestawu | [^0-9] pasuje do znaku niebędącego cyfrą |
| [a-z] | Zakres znaków | [A-Za-z] pasuje do dowolnej litery |
Kwantyfikator
| Wzorzec | Znaczenie | Przykład |
|---|---|---|
| * | Zero lub więcej razy | ab*c pasuje do ac, abc, abbc |
| + | Jeden lub więcej razy | ab+c pasuje do abc, abbc |
| ? | Zero lub jeden raz | colou?r pasuje do color, colour |
| {n} | Dokładnie n razy | \d{4} pasuje do 4 cyfr |
| {n,} | n razy lub więcej | \d{2,} pasuje do 2 lub więcej cyfr |
| {n,m} | od n do m razy | \d{3,5} pasuje do 3-5 cyfr |
Kotwice i granice
| Wzorzec | Znaczenie | Przykład |
|---|---|---|
| ^ | Początek stringa lub linii | ^Hello pasuje do Hello na początku |
| $ | Koniec stringa lub linii | world$ pasuje do world na końcu |
| \b | Granica słowa | \bcat\b pasuje do pojedynczego cat |
| \B | Granica niebędąca granicą słowa | \Bcat pasuje do scattered |
Grupowanie i alternacja
| Wzorzec | Znaczenie | Przykład |
|---|---|---|
| (abc) | Grupa przechwytuj\u0105ca | (ab)+ dopasowuje abab |
| (?:abc) | Grupa nieprzechwytuj\u0105ca | (?:ab)+ dopasowuje abab |
| a|b | Alternacja (lub) | cat|dog pasuje do cat lub dog |
| \1 | Odwołanie wsteczne do grupy 1 | (\w)\1 dopasowuje aa, bb |
| Nazwana grupa przechwytująca | Odwołanie przez nazwę |
Popularne wzorce wyrażeń regularnych
Oto najczęściej używane wzorce wyrażeń regularnych w rozwoju webowym i walidacji danych:
Walidacja adresu e-mail
Praktyczny regex dla adresów e-mail, który wychwytuje większość nieprawidłowych adresów bez bycia zbyt restrykcyjnym: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$. Ten wzorzec waliduje podstawową strukturę e-mail, dopuszczając typowe znaki w części lokalnej i wymagając prawidłowej nazwy domeny z TLD o co najmniej dwóch znakach.
Walidacja URL
Dopasowuje URL HTTP i HTTPS: ^https?:\/\/(www\.)?[a-zA-Z0-9-]+\.[a-zA-Z]{2,}(\/[^\s]*)?$ . Ten wzorzec dopasowuje URL z opcjonalnym prefiksem www, nazwą domeny i opcjonalną ścieżką.
Numer telefonu (USA)
Numery telefonów USA w różnych formatach: ^\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}$ . Ten wzorzec obsługuje formaty takie jak (555) 123-4567, 555-123-4567 i 5551234567.
Adres IP (IPv4)
Walidacja adresu IPv4: ^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$ . Ten wzorzec zapewnia, że każdy oktet mieści się w zakresie od 0 do 255.
Data (RRRR-MM-DD)
Format daty ISO: ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$. Ten wzorzec waliduje strukturę formatu, ale nie sprawdza poprawności dat w miesiącu.
Szesnastkowy kod koloru
Dopasowuje szesnastkowe kolory CSS: ^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$ . Ten wzorzec dopasowuje formaty 3-cyfrowe skrócone (#fff) i 6-cyfrowe (#ffffff).
Zaawansowane techniki
Lookahead i lookbehind
Asercje lookahead i lookbehind pozwalają dopasować wzorzec tylko wtedy, gdy po nim (lub przed nim) występuje (lub nie występuje) inny wzorzec, bez uwzględniania otaczającego tekstu w wyniku dopasowania.
- Pozytywny lookahead (?=pattern): Dopasowuje tylko wtedy, gdy wzorzec występuje po. Przykład: \d(?=px) dopasowuje tylko cyfry, po których następuje "px".
- Negatywny lookahead (?!pattern): Dopasowuje tylko wtedy, gdy wzorzec nie występuje po. Przykład: \d(?!px) dopasowuje cyfry, po których nie następuje "px".
- <=pattern): Dopasowuje tylko wtedy, gdy wzorzec występuje przed. Przykład: (?<=\$)\d+ dopasowuje cyfry poprzedzone znakiem dolara.
Dopasowanie zachłanne i leniwe
<.*>bold<.*?>".
Wskazówki dotyczące wydajności wyrażeń regularnych
- Używaj grup nieprzechwytujących (?:), gdy nie potrzebujesz wyodrębniać zawartości dopasowanej grupy
- Używaj kwantyfikatorów zaborczych lub grup atomowych, gdzie są wspierane, aby uniknąć nadmiernego backtrackingu
- Używaj konkretnych klas znaków zamiast szerokiego użycia metaznaku kropki
- Zakotwicz swój wzorzec za pomocą ^ i $, gdy musisz dopasować cały string
- Prekompiluj wzorce wyrażeń regularnych, gdy są wielokrotnie używane w pętli
- Używaj granic słów \b zamiast ^ i $ podczas wyszukiwania w większym tekście
Testowanie i debugowanie wyrażeń regularnych
Przed wdrożeniem wzorca wyrażenia regularnego zawsze testuj go z rzeczywistymi danymi wejściowymi. Użyj interaktywnego testera wyrażeń regularnych, który podświetla dopasowania w czasie rzeczywistym i wyjaśnia każdą część wzorca. Pomaga to wyłapać przypadki brzegowe i zrozumieć, dlaczego wzorzec dopasowuje lub nie dopasowuje określonych danych wejściowych. Wypróbuj nasz darmowy tester wyrażeń regularnych, aby interaktywnie budować i testować swoje wzorce.
Użyj naszych darmowych narzędzi do budowania, testowania i debugowania wzorców wyrażeń regularnych.
Wypróbuj tester wyrażeń regularnychŚciągawka wyrażeń regularnychFAQ
Jaka jest różnica między dopasowaniem zachłannym a leniwym w regex?
Kwantyfikatory zachłanne dopasowują jak najwięcej tekstu, podczas gdy kwantyfikatory leniwe dopasowują jak najmniej tekstu. Dodanie znaku zapytania po kwantyfikatorze czyni go leniwym. Na przykład, .* dopasowuje najdłuższy możliwy ciąg, podczas gdy .*? dopasowuje najkrótszy.
Czy wyrażenia regularne są takie same we wszystkich językach programowania?
Nie, implementacje wyrażeń regularnych różnią się w zależności od języka. Większość obsługuje podstawową składnię POSIX, ale zaawansowane funkcje, takie jak lookbehind, grupy nazwane i wsparcie Unicode, różnią się. JavaScript historycznie miał ograniczone wsparcie dla wyrażeń regularnych, ale w ostatnich latach dodał wiele funkcji.
Czy wyrażenia regularne mogą parsować HTML lub XML?
Nie, wyrażenia regularne nie mogą niezawodnie parsować HTML ani XML, ponieważ są to zagnieżdżone języki bezkontekstowe. Wyrażenia regularne nie mają pojęcia głębokości zagnieżdżenia ani zrównoważonych znaczników. Użyj odpowiedniego parsera HTML lub XML. Wyrażenia regularne mogą wyodrębniać proste wzorce z HTML, ale zawodzą przy złożonych strukturach.
Czym są lookahead i lookbehind w wyrażeniach regularnych?
<=pattern) to pozytywny lookbehind, dopasowujący, jeśli wzorzec występuje przed. Wersje negatywne używają ! zamiast =.
Jak sprawić, by wyrażenie regularne ignorowało wielkość liter?
Dodanie flagi i po zamykającym ograniczniku sprawia, że cały wzorzec ignoruje wielkość liter. W JavaScript użyj /pattern/i. W Pythonie użyj re.IGNORECASE lub re.I jako flagi. Możesz również użyć (?i) inline, aby uczynić określoną część nieczułą na wielkość liter.
ToolHub's collection of 300+ free online tools including regex tester, cheat sheets, and more — no sign-up required.