Czym Jest Wyrażenie Regularne? Kompletnowe Wyjaśnienie
Szybka odpowiedź
Regular expression to wzorzec opisujący zbiór stringów. Używa literal characters i metacharacters (*, +, ?, ., ^, $, [], (), {}, |, \) ze specjalnymi znaczeniami. Regex jest używany do walidacji, wyszukiwania, ekstrakcji i zastępowania. Użyj naszego darmowego Regex Tester.
Wstęp
Regular expression (regex lub regexp) to sekwencja znaków, która definiuje wzorzec wyszukiwania. Wzorzec jest używany przez algorytmy string-searching do znajdowania, matchowania lub zastępowania tekstu. Regex wywodzi się z teorii języków formalnych lat 50. (Stephen Kleene) i został adoptowany do narzędzi tekstowych Unix (grep, sed, awk) w latach 70. Dziś regex jest wbudowany w praktycznie każdy język programowania i edytor.
Krok po kroku
-
Zrozumienie dosłowności i metaznaków
Litery (a, b, 1, @) pasują do siebie. Metaznaki mają specjalne znaczenie: . dopasowuje dowolny znak, * oznacza zero lub więcej, + oznacza jeden lub więcej, ? oznacza zero lub jeden, ^ początek dopasowania, $ koniec dopasowania.
-
Naucz się klas postaci
Nawiasy kwadratowe [] definiują klasę znaków — [aeiou] pasuje do dowolnej samogłoski, [0-9] dopasowuje dowolną cyfrę, [^0-9] dopasowuje dowolną inną niż cyfrę. Klasy skrócone: \d (cyfra), \w (znak słowa), \s (biała spacja) i ich wielkie negacje.
-
Użyj kwantyfikatorów
Kwantyfikatory określają, ile razy wzór się powtarza: * (0+), + (1+), ? (0 lub 1), {n} (dokładnie n), {n,} (n+), {n,m} (n do m). Domyślnie chciwy; dodać ? dla leniwego dopasowywania (np. *?).
-
Grupa i kotwica
Nawiasy () tworzą grupy przechwytywania. Naprzemienność | pasuje do obu stron (kot|pies). Kotwice ^ i $ dopasowują początek i koniec łańcucha. Użyj ich, aby zbudować złożone wzory z prostszych.
Przykłady
Dopasuj wzór przypominający e-mail
Wejście: Pattern: [a-z]+@[a-z]+\.[a-z]+
Wyjście: Dopasowania: alice@example.com, bob@test.org
Dopasuj format numeru telefonu
Wejście: Pattern: \d{3}-\d{3}-\d{4}
Wyjście: Matches: 555-123-4567
Wyodrębnij pary klucz-wartość
Wejście: Pattern: (\w+)=(\w+)
Wyjście: Matches 'key=value' with group 1 as key, group 2 as value
Typowe problemy
- Chciwe dopasowywanie, nadmierne zużycie —.* dopasowuje jak najwięcej. Używać .*? dla leniwego dopasowywania, aby znaleźć najkrótsze dopasowanie.
- Zapominanie o ucieczce od znaków specjalnych —., *, +, ? itd. są specjalne. Użyj \, aby dopasować je dosłownie (np. \. dopasowuje dosłowną kropkę).
- Katastrofalne cofanie się — wzorce z zagnieżdżonymi kwantyfikatorami (np. (a+)+) na niektórych danych wejściowych mogą zająć wykładniczy czas, powodując ataki ReDoS.
- Nadmierne dopasowanie — bez kotwic (^ i $) wzór pasuje wszędzie. Użyj ^...$, aby dopasować cały ciąg.
Porady
- Zacznij od prostego i stopniowo dodawaj złożoność — debugowanie złożonego wyrażenia regularnego na raz jest bardzo trudne.
- Użyj testera wyrażeń regularnych, aby poeksperymentować ze wzorcami na podstawie przykładowego tekstu — zobacz dopasowania podświetlane w czasie rzeczywistym.
- Komentuj złożone wyrażenia regularne, korzystając z trybu rozszerzonego (flaga /x w niektórych silnikach) lub dziel je na nazwane części.
- Skorzystaj z naszego Testera Regex, aby natychmiast przetestować wzorce w przeglądarce — bez rejestracji, w pełni prywatnie.