Ściągawka regex
Wyrażenia regularne są na tyle zwięzłe, że składnię łatwiej sprawdzić niż zapamiętać. Ta strona zawiera ją w całości na jednym ekranie — klasy, kwantyfikatory, kotwice, grupy, lookaround, escapowanie i flagi — z działającym przykładem dla każdego wiersza.
Odmiana to JavaScript, czyli to, co działa w Twojej przeglądarce i czego używa tester regex na tej stronie. Większość z tego jest identyczna w Pythonie, Javie, Go i PCRE; tam, gdzie odmiany się różnią, różnią się na obrzeżach — obsługa lookbehind, składnia grup nazwanych oraz to, czy \d oznacza „cyfrę ASCII”, czy „dowolną cyfrę Unicode”.
Za większość niespodzianek odpowiadają dwie rzeczy. Kwantyfikatory są zachłanne: biorą wszystko, co się da, i oddają dopiero, gdy reszta wzorca zawiedzie, dlatego <.+> pochłania dwa znaczniki, a <.+?> nie. A alternatywa wiąże najsłabiej ze wszystkiego, więc ^a|b$ oznacza „zaczyna się od a lub kończy się na b” — a nie to, co większość ludzi ma na myśli, pisząc to.
Klasy znaków
11Skróty działają tylko dla ASCII, chyba że dodasz flagę u i użyjesz sekwencji escape właściwości Unicode.
| Składnia | Znaczenie | Przykład |
|---|---|---|
| . | Dowolny znak z wyjątkiem złamania liniiDodaj flagę s, aby dopasowywał także znaki nowej linii. | /a.c/"abc" → "abc" |
| \d | Cyfra, 0–9 | /\d+/"order 42" → "42" |
| \D | Wszystko, co nie jest cyfrą | /\D+/"42abc" → "abc" |
| \w | Litera, cyfra lub podkreślenieTylko ASCII — „é” nie jest \w. | /\w+/"user_1!" → "user_1" |
| \W | Wszystko, czego \w nie dopasowuje | /\W+/"a++b" → "++" |
| \s | Dowolny biały znak, w tym tabulatory i znaki nowej linii | /\s+/"a \t b" → " \t " |
| \S | Dowolny znak niebędący białym znakiem | /\S+/" hi" → "hi" |
| [abc] | Dowolny z wymienionych znaków | /[aeiou]/"rhythm and" → "a" |
| [^abc] | Dowolny znak z wyjątkiem wymienionych | /[^aeiou ]+/"aeiou xyz" → "xyz" |
| [a-z] | Zakres znaków | /[a-f]+/"zzabcz" → "abc" |
| \p{L} | Dowolna litera Unicode (wymaga flagi u) | /\p{L}+/"42 café" → "café" |
Kwantyfikatory
7Wszystkie są domyślnie zachłanne: biorą tyle, ile mogą, i oddają tylko wtedy, gdy reszta wzorca zawiedzie.
| Składnia | Znaczenie | Przykład |
|---|---|---|
| * | Zero lub więcej | /ab*/"a" → "a" |
| + | Jeden lub więcej | /ab+/"abbb" → "abbb" |
| ? | Zero lub jeden — czyni to opcjonalnym | /colou?r/"color" → "color" |
| {3} | Dokładnie trzy | /\d{3}/"id 12345" → "123" |
| {2,} | Dwa lub więcej | /a{2,}/"aaa" → "aaa" |
| {2,4} | Od dwóch do czterech | /a{2,4}/"aaaaa" → "aaaa" |
| *? | Leniwy — bierze jak najmniejZachłanny <.+> pochłonąłby oba znaczniki. | /<.+?>/"<a><b>" → "<a>" |
Kotwice i granice
4Dopasowują pozycję, a nie znak, więc niczego nie konsumują.
| Składnia | Znaczenie | Przykład |
|---|---|---|
| ^ | Początek ciągu lub linii z flagą m | /^a/"abc" → "a" |
| $ | Koniec ciągu lub linii z flagą m | /c$/"abc" → "c" |
| \b | Granica słowaTo właśnie powstrzymuje dopasowanie „cat” wewnątrz „concatenate”. | /\bcat\b/"the cat sat" → "cat" |
| \B | Nie granica słowa | /\Bcat/"concatenate" → "cat" |
Grupy i alternatywa
5| Składnia | Znaczenie | Przykład |
|---|---|---|
| (abc) | Grupa przechwytująca — zapamiętana do podstawienia | /(\d+)-(\d+)/"10-20" → "10-20" |
| (?:abc) | Grupowanie bez przechwytywaniaUżywaj tego, gdy potrzebujesz tylko grupowania; dzięki temu numery przechwyceń zachowują sens. | /(?:ab)+/"abab" → "abab" |
| (?<name>…) | Nazwana grupa przechwytująca | /(?<year>\d{4})/"in 2026" → "2026" |
| a|b | Jedna lub druga strona — alternatywaAlternatywa ma najniższy priorytet: ^a|b$ to „^a” lub „b$”, a nie „^(a|b)$”. | /cat|dog/"one dog" → "dog" |
| \1 | Odwołanie wsteczne do pierwszej grupy | /(\w)\1/"letter" → "tt" |
Lookaround
4Asercje dotyczące tego, co otacza daną pozycję. Same niczego nie dopasowują, co czyni je bezpiecznymi do łączenia.
| Składnia | Znaczenie | Przykład |
|---|---|---|
| (?=…) | Lookahead — po którym następuje to | /\d+(?= kg)/"80 kg" → "80" |
| (?!…) | Negatywny lookahead — po którym nie następuje to | /\d+(?! kg)/"80 lb" → "80" |
| (?<=…) | Lookbehind — poprzedzony tym | /(?<=\$)\d+/"costs $40" → "40" |
| (?<!…) | Negatywny lookbehind — niepoprzedzony tym | /(?<!\$)\b\d+/"about 40" → "40" |
Escapowanie
5Te dwanaście znaków wymaga odwrotnego ukośnika, aby były traktowane dosłownie.
| Składnia | Znaczenie | Przykład |
|---|---|---|
| \. | Dosłowna kropka | /\d\.\d/"v2.5" → "2.5" |
| \\ | Dosłowny odwrotny ukośnik | /\\/"C:\\dir" → "\\" |
| \n | Wysuw wiersza | /a\nb/"a\nb" → "a\nb" |
| \t | Tabulator | /a\tb/"a\tb" → "a\tb" |
| \uFFFF | Znak według jego punktu kodowego | /\u00e9/"café" → "é" |
Flagi
6| Flaga | Nazwa | Znaczenie |
|---|---|---|
| g | Globalna | Znajduje każde dopasowanie, nie tylko pierwsze. |
| i | Ignorowanie wielkości liter | Dopasowuje niezależnie od wielkości liter. |
| m | Wielowierszowa | Sprawia, że ^ i $ dopasowują się przy każdym złamaniu linii, a nie tylko na końcach ciągu. |
| s | Dot all | Pozwala, aby . dopasowywała także złamania linii. |
| u | Unicode | Traktuje wzorzec jako punkty kodowe i włącza sekwencje escape właściwości \p{…}. |
| y | Sticky | Dopasowuje tylko dokładnie w pozycji lastIndex, nigdy nie szukając dalej. |