Przejdź do treści
TextArray

Ściągawka Regex

Wyrażenia regularne są na tyle zwarte, że składnię łatwiej jest sprawdzić niż zapamiętać. Na tej stronie jest wszystko na jednym ekranie — klasy, kwantyfikatory, kotwice, grupy, rozglądanie się, ucieczka i flagi — z działającym przykładem dla każdego wiersza.

Jej smak to JavaScript, który działa w Twojej przeglądarce i z którego korzysta tester wyrażeń regularnych na tej stronie. Większość z nich jest identyczna w Pythonie, Javie, Go i PCRE; tam, gdzie różnią się smaki, różnią się one na krawędziach - obsługa wyglądu wstecz, składnia nazwanych grup i to, czy \d oznacza „cyfrę ASCII” czy „dowolną cyfrę Unicode”.

Większość niespodzianek wynika z dwóch rzeczy. Kwantyfikatory są zachłanne: biorą wszystko, co mogą i oddają dopiero wtedy, gdy reszta wzorca zawiedzie, dlatego też <.+> połyka dwa znaczniki, a <.+?> nie. A naprzemienność wiąże najluźniej ze wszystkich, więc ^a|b$ oznacza „zaczyna się od a lub kończy na b” – a nie to, co większość ludzi ma na myśli, pisząc to.

Klasy postaci

Skróty są używane tylko w formacie ASCII, chyba że dodasz flagę u i użyjesz znaków specjalnych właściwości Unicode.

SkładniaOznaczającyPrzykład
.Dowolny znak z wyjątkiem podziału liniiDodaj flagę s, aby pasowała również do znaków nowej linii./a.c/"abc" → "abc"
\dCyfra 0–9/\d+/"order 42" → "42"
\DWszystko, co nie jest cyfrą/\D+/"42abc" → "abc"
\wLitera, cyfra lub podkreślenieTylko ASCII — „é” nie jest \w./\w+/"user_1!" → "user_1"
\WWszystko \w nie pasuje/\W+/"a++b" → "++"
\sDowolne białe znaki, w tym tabulatory i znaki nowej linii/\s+/"a \t b" → " \t "
\SDowolny znak inny niż spacja/\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

Wszystkie one są domyślnie chciwe: biorą tyle, ile mogą i oddają tylko wtedy, gdy reszta wzorca zawiedzie.

SkładniaOznaczającyPrzykład
*Zero lub więcej/ab*/"a" → "a"
+Jeden lub więcej/ab+/"abbb" → "abbb"
?Zero lub jeden — sprawia, że jest to opcjonalne/colou?r/"color" → "color"
{3}Dokładnie trzy/\d{3}/"id 12345" → "123"
{2,}Dwa lub więcej/a{2,}/"aaa" → "aaa"
{2,4}Między dwoma a czterema/a{2,4}/"aaaaa" → "aaaa"
*?Leniwy — zajmuje tak mało, jak to możliweChciwy <.+> połknąłby oba tagi./<.+?>/"<a><b>" → "<a>"

Kotwice i granice

Pasują one do pozycji, a nie do postaci, więc niczego nie zużywają.

SkładniaOznaczającyPrzykład
^Początek ciągu lub linii z flagą m/^a/"abc" → "a"
$Koniec łańcucha lub linii z flagą m/c$/"abc" → "c"
\bGranica słowaTo właśnie zatrzymuje dopasowanie „cat” w „concatenate”./\bcat\b/"the cat sat" → "cat"
\BNie ma granicy słowa/\Bcat/"concatenate" → "cat"

Grupy i naprzemienność

SkładniaOznaczającyPrzykład
(abc)Grupa przechwytująca — zapamiętana do wymiany/(\d+)-(\d+)/"10-20" → "10-20"
(?:abc)Grupowanie bez przechwytywaniaUżyj tej opcji, jeśli potrzebujesz tylko grupowania; dzięki temu liczby przechwytywania mają znaczenie./(?:ab)+/"abab" → "abab"
(?<name>…)Nazwana grupa przechwytująca/(?<year>\d{4})/"in 2026" → "2026"
a|bObie strony – naprzemiennieAlternacja ma najniższy priorytet: ^a|b$ to "^a" lub "b$", a nie "^(a|b)$"./cat|dog/"one dog" → "dog"
\1Odniesienie do pierwszej grupy/(\w)\1/"letter" → "tt"

Rozglądanie się

Twierdzenia na temat tego, co otacza stanowisko. Same w sobie do niczego nie pasują, co sprawia, że można je bezpiecznie łączyć.

SkładniaOznaczającyPrzykład
(?=…)Lookahead — a następnie to/\d+(?= kg)/"80 kg" → "80"
(?!…)Negatywne spojrzenie w przód — bez tego/\d+(?! kg)/"80 lb" → "80"
(?<=…)Lookbehind — poprzedzone tym/(?<=\$)\d+/"costs $40" → "40"
(?<!…)Negatywne spojrzenie wstecz — nie poprzedzone tym/(?<!\$)\b\d+/"about 40" → "40"

Ucieczka

Te dwanaście znaków wymaga dosłownego ukośnika.

SkładniaOznaczającyPrzykład
\.Dosłowna kropka/\d\.\d/"v2.5" → "2.5"
\\Dosłowny ukośnik odwrotny/\\/"C:\\dir" → "\\"
\nKanał liniowy/a\nb/"a\nb" → "a\nb"
\tZakładka/a\tb/"a\tb" → "a\tb"
\uFFFFZnak według jego punktu kodowego/\u00e9/"café" → "é"

Flagi

FlagaNazwaOznaczający
gŚwiatowyZnajdź każde dopasowanie, nie tylko pierwsze.
iIgnoruj wielkość literDopasuj niezależnie od wielkich i małych liter.
mMultiliniaDopasowuje ^ i $ przy każdym podziale wiersza, a nie tylko na końcach łańcucha.
sKropkuj wszystkoPozwala. również przerwy w linii meczu.
uUnikodTraktuje wzorzec jako punkty kodowe i umożliwia ucieczkę właściwości \p{…}.
yLepkiDopasowuje tylko dokładnie lastIndex, nigdy nie szuka do przodu.

Częste pytania

Jaka jest różnica między kwantyfikatorami zachłannymi i leniwymi?
Kwantyfikatory zachłanne (*, +, {2,}) dopasowują się tak bardzo, jak to możliwe i zwracają znaki tylko wtedy, gdy reszta wzorca nie może się zgadzać. Dodawanie? czyni ich leniwymi: dopasowują się jak najmniej, a więcej biorą tylko wtedy, gdy są zmuszeni. W przypadku „<a><b>” wzorzec <.+> zwraca cały ciąg, a <.+?> zwraca tylko <a>.
Dlaczego moje słowo pasuje do innych słów?
Ponieważ nic go nie zakotwiczyło. Zawiń słowo w \b — /\bcat\b/ dopasowuje „cat” do „the cat sat”, ale nie do „concatenate”. \b dopasowuje pozycję pomiędzy znakiem słowa a znakiem niebędącym słowem, więc nic nie zużywa.
Co zmienia flaga u?
Sprawia, że wzorzec działa na punktach kodowych, a nie na jednostkach UTF-16, więc pojedynczy emoji liczy się jako jeden znak i umożliwia ucieczkę właściwości \p{…}, np. \p{L} dla „dowolnej litery”. Bez tego \w i \d pozostają tylko w formacie ASCII, dlatego też „kawiarnia” nie jest w pełni zgodna z /\w+/.
Kiedy należy używać grupy nieprzechwytującej?
Ilekroć potrzebujesz grupowania, ale nie przechwyconego tekstu — (?:ab)+ zamiast (ab)+. Przechwytywanie kosztuje trochę wydajności, ale prawdziwym powodem jest numeracja: każda dodana grupa przechwytywania przesuwa numery kolejnych grup przechwytywania, cicho przerywając zamienniki wykorzystujące 1 USD i 2 USD.
Czy korzystanie z funkcji Lookbehind jest bezpieczne?
W obecnych przeglądarkach i węźle tak — (?<=…) i (?<!…) są obsługiwane we wszystkich głównych silnikach od 2018 r. Safari dodało je jako ostatnie. Jeśli celujesz w bardzo stare środowiska wykonawcze, sprawdź najpierw; nie ma wypełnienia dla składni wyrażeń regularnych.