Wyrażenia regularne dla ludzi: praktyczny przewodnik
Wyrażenia regularne (regex) mają problem wizerunkowy. Wyglądają, jakby ktoś zasnął na klawiaturze: ^[\w.-]+@[\w-]+\.[\w.]+$. Pojawiają się w przeglądach kodu, edytorach tekstu, narzędziach wyszukiwania i walidacji formularzy.
Prawda jest gdzieś pośrodku. Regex jest naprawdę potężny. Jest też naprawdę mylący na początku. Ale nie musisz opanowywać każdej niejasnej funkcji, aby uzyskać praktyczną wartość. Garść wzorców pokrywa zdecydowaną większość rzeczywistych przypadków użycia.
Co regex tak naprawdę robi
Wyrażenie regularne to wzorzec opisujący zbiór ciągów znaków. Dajesz go narzędziu do wyszukiwania, a ono znajduje każdy ciąg pasujący do wzorca. Pomyśl o tym jak o bardzo precyzyjnym zapytaniu wyszukiwania.
Zwykłe wyszukiwanie: znajdź dokładnie „hello" Wyszukiwanie regex: znajdź cokolwiek, co wygląda jak adres e-mail, numer telefonu, data, URL lub dowolny inny wzorzec, który potrafisz opisać.
Czy wiesz, że? Wyrażenia regularne zostały wynalezione przez matematyka Stephena Kleene w 1956 roku jako notacja do opisywania „języków regularnych" w teorii języków formalnych. Trafiły do informatyki przez wczesne edytory tekstu Unix w latach 60. i 70.
Elementy składowe
Znaki literalne
Najprostszy regex to po prostu literalny tekst. Wzorzec hello pasuje do ciągu „hello."
Kropka (.) — dowolny pojedynczy znak
Kropka pasuje do dowolnego pojedynczego znaku (oprócz nowej linii).
h.tpasuje do „hat", „hit", „hot", „hut", a nawet „h3t"
Klasy znaków ([]) — konkretne znaki
[aeiou]pasuje do dowolnej samogłoski[0-9]pasuje do dowolnej cyfry[A-Za-z]pasuje do dowolnej litery[^0-9]pasuje do dowolnego znaku, który NIE jest cyfrą
Kwantyfikatory — ile
| Symbol | Znaczenie | Przykład | Pasuje |
|---|---|---|---|
* |
Zero lub więcej | ab*c |
„ac", „abc", „abbc" |
+ |
Jeden lub więcej | ab+c |
„abc", „abbc" (nie „ac") |
? |
Zero lub jeden | colou?r |
„color" i „colour" |
{3} |
Dokładnie 3 | a{3} |
„aaa" |
{2,4} |
Od 2 do 4 | a{2,4} |
„aa", „aaa", „aaaa" |
Kotwice — pozycja
^na początku oznacza „początek ciągu"$na końcu oznacza „koniec ciągu"
Skrótowe klasy
| Skrót | Odpowiednik | Znaczenie |
|---|---|---|
\d |
[0-9] |
Dowolna cyfra |
\w |
[A-Za-z0-9_] |
Dowolny znak „słowa" |
\s |
[ \t\n\r] |
Dowolny biały znak |
Grupy (()) — grupowanie i przechwytywanie
(ab)+pasuje do „ab", „abab", „ababab"(\d{3})-(\d{4})pasuje do „555-1234" i przechwytuje „555" i „1234" oddzielnie
Pipe (|) — lub
cat|dogpasuje do „cat" lub „dog"
Praktyczne wzorce do użycia już dziś
Dopasowanie adresu e-mail (prosty)
[\w.-]+@[\w-]+\.[\w.]+
Dopasowanie numeru telefonu (format USA)
\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}
Dopasowanie URL-a
https?://[\w.-]+(/[\w./-]*)?
Dopasowanie daty (RRRR-MM-DD)
\d{4}-\d{2}-\d{2}
Znajdowanie zduplikowanych słów
\b(\w+)\s+\1\b
Wskazówki do pisania regex
- Zacznij prosto, potem dopracuj.
- Zawsze testuj — regex łatwo źle napisać.
- Escapuj znaki specjalne — jeśli musisz dopasować literalną kropkę, użyj
\.. - Wiedz, kiedy nie używać regex — regex to złe narzędzie do parsowania HTML, XML, JSON.
Wskazówka Testuj i debuguj wzorce regex w czasie rzeczywistym: Jak testować wzorce regex. Wklej wzorzec i dane testowe, a dopasowania zostaną podświetlone natychmiast.
Zacznij testować regex teraz:
Darmowe, z natychmiastowym feedbackiem i bez rejestracji.