İçeriğe atla

Regex hızlı kılavuzu

Düzenli ifadeler, söz dizimini ezberlemektense aramanın daha kolay olduğu kadar özdür. Bu sayfa, her satır için çalışan bir örnekle birlikte, bunların tümünü tek ekranda sunar — sınıflar, niceleyiciler, sabitleyiciler, gruplar, lookaround, kaçışlama ve bayraklar.

Kullanılan sürüm JavaScript'tir; tarayıcınızda çalışan ve bu sitedeki regex test aracının kullandığı sürüm budur. Çoğu Python, Java, Go ve PCRE'de aynıdır; sürümler ayrıştığında, ayrımlar uç noktalarda olur — lookbehind desteği, adlandırılmış grup söz dizimi ve \d'nin "ASCII rakamı" mı yoksa "herhangi bir Unicode rakamı" mı anlamına geldiği.

Sürprizlerin çoğunun iki nedeni vardır. Niceleyiciler açgözlüdür: alabildikleri her şeyi alır ve yalnızca desenin geri kalanı başarısız olduğunda geri verirler; bu yüzden <.+> iki etiketi yutar, <.+?> yutmaz. Ve alternasyon hepsinden gevşek bağlanır, dolayısıyla ^a|b$ "a ile başlar ya da b ile biter" anlamına gelir — çoğu kişinin yazarken kastettiği şey değil.

Karakter sınıfları

11

Kısaltmalar, u bayrağını ekleyip Unicode özellik kaçışları kullanmadıkça yalnızca ASCII'dir.

Söz dizimiAnlamÖrnek
.Satır sonu dışında herhangi bir karakterSatır sonlarını da eşleştirmesi için s bayrağını ekleyin./a.c/"abc" "abc"
\dBir rakam, 0–9/\d+/"order 42" "42"
\DRakam olmayan herhangi bir şey/\D+/"42abc" "abc"
\wHarf, rakam ya da alt çizgiYalnızca ASCII — "é", \w değildir./\w+/"user_1!" "user_1"
\W\w'nin eşleştirmediği herhangi bir şey/\W+/"a++b" "++"
\sSekmeler ve satır sonları dâhil herhangi bir boşluk/\s+/"a \t b" " \t "
\SBoşluk olmayan herhangi bir karakter/\S+/" hi" "hi"
[abc]Listelenen karakterlerden herhangi biri/[aeiou]/"rhythm and" "a"
[^abc]Listelenenler dışında herhangi bir karakter/[^aeiou ]+/"aeiou xyz" "xyz"
[a-z]Bir karakter aralığı/[a-f]+/"zzabcz" "abc"
\p{L}Herhangi bir Unicode harfi (u bayrağı gerekir)/\p{L}+/"42 café" "café"

Niceleyiciler

7

Bunların tümü varsayılan olarak açgözlüdür: alabildikleri kadar alır ve yalnızca desenin geri kalanı başarısız olursa geri verirler.

Söz dizimiAnlamÖrnek
*Sıfır ya da daha fazla/ab*/"a" "a"
+Bir ya da daha fazla/ab+/"abbb" "abbb"
?Sıfır ya da bir — isteğe bağlı yapar/colou?r/"color" "color"
{3}Tam olarak üç/\d{3}/"id 12345" "123"
{2,}İki ya da daha fazla/a{2,}/"aaa" "aaa"
{2,4}İki ile dört arasında/a{2,4}/"aaaaa" "aaaa"
*?Tembel — mümkün olduğunca az alırAçgözlü <.+> her iki etiketi de yutardı./<.+?>/"<a><b>" "<a>"

Sabitleyiciler ve sınırlar

4

Bunlar bir karakteri değil bir konumu eşleştirir, bu yüzden hiçbir şey tüketmezler.

Söz dizimiAnlamÖrnek
^Dizenin başı ya da m bayrağıyla bir satırın başı/^a/"abc" "a"
$Dizenin sonu ya da m bayrağıyla bir satırın sonu/c$/"abc" "c"
\bBir sözcük sınırı"cat"in "concatenate" içinde eşleşmesini durduran şey budur./\bcat\b/"the cat sat" "cat"
\BSözcük sınırı değil/\Bcat/"concatenate" "cat"

Gruplar ve alternasyon

5
Söz dizimiAnlamÖrnek
(abc)Yakalayan grup — değiştirme için hatırlanır/(\d+)-(\d+)/"10-20" "10-20"
(?:abc)Yakalamadan gruplamaYalnızca gruplamaya ihtiyacınız olduğunda bunu kullanın; yakalama numaralarını anlamlı tutar./(?:ab)+/"abab" "abab"
(?<name>…)Adlandırılmış yakalayan grup/(?<year>\d{4})/"in 2026" "2026"
a|bHer iki taraf — alternasyonAlternasyonun önceliği en düşüktür: ^a|b$, "^(a|b)$" değil, "^a" ya da "b$" demektir./cat|dog/"one dog" "dog"
\1İlk gruba geri başvuru/(\w)\1/"letter" "tt"

Lookaround

4

Bir konumu neyin çevrelediğine dair savlar. Kendileri hiçbir şeyi eşleştirmez, bu da onları birleştirmeyi güvenli kılan şeydir.

Söz dizimiAnlamÖrnek
(?=…)Lookahead — ardından bu gelir/\d+(?= kg)/"80 kg" "80"
(?!…)Olumsuz lookahead — ardından bu gelmez/\d+(?! kg)/"80 lb" "80"
(?<=…)Lookbehind — öncesinde bu gelir/(?<=\$)\d+/"costs $40" "40"
(?<!…)Olumsuz lookbehind — öncesinde bu gelmez/(?<!\$)\b\d+/"about 40" "40"

Kaçışlama

5

Bu on iki karakter, gerçek anlamıyla alınmak için ters eğik çizgiye ihtiyaç duyanlardır.

Söz dizimiAnlamÖrnek
\.Gerçek bir nokta/\d\.\d/"v2.5" "2.5"
\\Gerçek bir ters eğik çizgi/\\/"C:\\dir" "\\"
\nBir satır beslemesi/a\nb/"a\nb" "a\nb"
\tBir sekme/a\tb/"a\tb" "a\tb"
\uFFFFKod noktasına göre bir karakter/\u00e9/"café" "é"

Bayraklar

6
BayrakAdAnlam
gGlobalYalnızca ilkini değil, her eşleşmeyi bulur.
iBüyük/küçük harfi yok sayBüyük ya da küçük harften bağımsız olarak eşleştirir.
mÇok satırlı^ ve $ işaretlerinin yalnızca dizenin uçlarında değil, her satır sonunda eşleşmesini sağlar.
sDot all. işaretinin satır sonlarını da eşleştirmesine izin verir.
uUnicodeDeseni kod noktaları olarak ele alır ve \p{…} özellik kaçışlarını etkinleştirir.
yStickyYalnızca tam olarak lastIndex konumunda eşleşir, asla ileriye doğru arama yapmaz.

FAQ

Açgözlü ve tembel niceleyiciler arasındaki fark nedir?
Açgözlü niceleyiciler (*, +, {2,}) mümkün olduğunca çok eşleşir ve karakterleri yalnızca desenin geri kalanı eşleşemediğinde geri verir. ? eklemek onları tembel yapar: mümkün olduğunca az eşleşir ve yalnızca zorlandıklarında daha fazlasını alırlar. "<a><b>" üzerinde, <.+> deseni tüm dizeyi döndürür, <.+?> ise yalnızca <a>'yı döndürür.
Sözcüğüm neden başka sözcüklerin içinde eşleşiyor?
Çünkü onu hiçbir şey sabitlemedi. Sözcüğü \b içine sarın — /\bcat\b/, "the cat sat" içindeki "cat"i eşleştirir ama "concatenate" içindekini eşleştirmez. \b, bir sözcük karakteri ile sözcük olmayan bir karakter arasındaki konumu eşleştirir, bu yüzden hiçbir şey tüketmez.
u bayrağı neyi değiştirir?
Deseni UTF-16 birimleri yerine kod noktaları üzerinde çalıştırır, böylece tek bir emoji tek karakter sayılır ve "herhangi bir harf" için \p{L} gibi \p{…} özellik kaçışlarını etkinleştirir. Onsuz, \w ve \d yalnızca ASCII kalır; bu yüzden "café", /\w+/ ile tam olarak eşleşmez.
Yakalamayan bir grubu ne zaman kullanmalıyım?
Grubu isteyip yakalanan metni istemediğiniz her durumda — (ab)+ yerine (?:ab)+. Yakalamalar biraz performansa mal olur, ama asıl neden numaralandırmadır: eklediğiniz her yakalama grubu, sonrasındakilerin numaralarını kaydırır ve $1 ile $2 kullanan değiştirmeleri sessizce bozar.
Lookbehind kullanmak güvenli mi?
Güncel tarayıcılarda ve Node'da evet — (?<=…) ve (?<!…) 2018'den bu yana her büyük motorda destekleniyor. Bunu ekleyen son tarayıcı Safari oldu. Çok eski çalışma zamanlarını hedefliyorsanız önce kontrol edin; regex söz dizimi için bir polyfill yoktur.