Ś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ładnia | Oznaczający | Przykł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" |
| \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 \w nie pasuje | /\W+/"a++b" → "++" |
| \s | Dowolne białe znaki, w tym tabulatory i znaki nowej linii | /\s+/"a \t b" → " \t " |
| \S | Dowolny 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ładnia | Oznaczający | Przykł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ładnia | Oznaczający | Przykład |
|---|---|---|
| ^ | Początek ciągu lub linii z flagą m | /^a/"abc" → "a" |
| $ | Koniec łańcucha lub linii z flagą m | /c$/"abc" → "c" |
| \b | Granica słowaTo właśnie zatrzymuje dopasowanie „cat” w „concatenate”. | /\bcat\b/"the cat sat" → "cat" |
| \B | Nie ma granicy słowa | /\Bcat/"concatenate" → "cat" |
Grupy i naprzemienność
| Składnia | Oznaczający | Przykł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|b | Obie strony – naprzemiennieAlternacja ma najniższy priorytet: ^a|b$ to "^a" lub "b$", a nie "^(a|b)$". | /cat|dog/"one dog" → "dog" |
| \1 | Odniesienie 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ładnia | Oznaczający | Przykł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ładnia | Oznaczający | Przykład |
|---|---|---|
| \. | Dosłowna kropka | /\d\.\d/"v2.5" → "2.5" |
| \\ | Dosłowny ukośnik odwrotny | /\\/"C:\\dir" → "\\" |
| \n | Kanał liniowy | /a\nb/"a\nb" → "a\nb" |
| \t | Zakładka | /a\tb/"a\tb" → "a\tb" |
| \uFFFF | Znak według jego punktu kodowego | /\u00e9/"café" → "é" |
Flagi
| Flaga | Nazwa | Oznaczający |
|---|---|---|
| g | Światowy | Znajdź każde dopasowanie, nie tylko pierwsze. |
| i | Ignoruj wielkość liter | Dopasuj niezależnie od wielkich i małych liter. |
| m | Multilinia | Dopasowuje ^ i $ przy każdym podziale wiersza, a nie tylko na końcach łańcucha. |
| s | Kropkuj wszystko | Pozwala. również przerwy w linii meczu. |
| u | Unikod | Traktuje wzorzec jako punkty kodowe i umożliwia ucieczkę właściwości \p{…}. |
| y | Lepki | Dopasowuje tylko dokładnie lastIndex, nigdy nie szuka do przodu. |