Bir dakikada temel mantık
Karakterlerin çoğu kendisiyle eşleşir: kedi deseni metinde k, e, d, i harflerini bu sırayla bulur; kediler kelimesinin içinde de. Birkaç karakterin özel anlamı var: . ^ $ * + ? ( ) [ ] { } | ve ters eğik çizgi. Bunlardan birini harfiyen aramak için önüne ters eğik çizgi koy: \. gerçek bir noktayı, \$ dolar işaretini bulur.
Buradaki örnekler JavaScript söz dizimiyle yazıldı; tarayıcılar, Node.js ve bu sayfadaki test aracı bunu kullanır. Python, PHP (PCRE), Java ve .NET neredeyse hepsini paylaşır; farklar çoğunlukla geriye bakma (lookbehind), adlı grup yazımı ve birkaç kaçış dizisindedir. Deseni Düzenli ifade alanına eğik çizgiler olmadan yaz, metni Test metni alanına yapıştır; her eşleşme renklenir.
Burada dene: Regex test aracı
Aracın tam sayfasını açKarakterler ve sınıflar
Karakter sınıfı, bir kümeden tek bir karakterle eşleşir. [aeıioöuü] tek bir Türkçe ünlüyü, [a-z] tek bir küçük ASCII harfi, [^0-9] rakam olmayan her şeyi bulur. Köşeli parantez içinde özel karakterlerin çoğu anlamını kaybeder, yani [.?] bir nokta ya da soru işareti bulur. Tireyi harfiyen istiyorsan başa ya da sona koy: [-.] veya [.-].
| Desen | Eşleştiği şey | Örnek |
|---|---|---|
| . | Satır sonu hariç herhangi bir karakter | k.l deseni kal, kol, kül bulur |
| \d | 0 ile 9 arası bir rakam | \d\d, Oda 42 içinde 42'yi bulur |
| \w | Harf, rakam ya da alt çizgi (sadece ASCII) | \w+, kullanici_01'i bulur |
| \s | Boşluk, sekme ya da satır sonu | a\sb, a b'yi bulur |
| \D \W \S | \d, \w ve \s'nin tersi | \D, 4x4 içindeki x'i bulur |
| [abc] | a, b ya da c'den biri | gr[ae]y, gray ve grey'i bulur |
| [^abc] | a, b ve c dışında herhangi biri | [^,]+ virgüller arasındaki metni bulur |
| \p{L} | Her dilde herhangi bir harf (u bayrağı) | \p{L}+ ılık ve şeftali'yi bütün bulur |
| \b | Kelime sınırı (karakter değil) | \bcat\b, cat'i bulur ama concat'i bulmaz |
Niceleyiciler, çapalar ve gruplar
Niceleyiciler, önlerindeki şeyin kaç kez tekrarlanacağını söyler. Çapalar bir karakteri değil, bir konumu eşler. Gruplar desenin parçalarını bir araya toplar, eşleşeni yakalar ve seçenekler arasında seçim yapmanı sağlar.
| Desen | Anlamı | Örnek |
|---|---|---|
| * | 0 ya da daha fazla | ab*c; ac, abc, abbc bulur |
| + | 1 ya da daha fazla | \d+; 7 ve 2026 bulur |
| ? | 0 ya da 1 kez (isteğe bağlı) | colou?r; color ve colour bulur |
| {3} | Tam 3 kez | \d{3}; 555 bulur |
| {2,4} | 2 ile 4 kez arası | \d{2,4}; 12, 123, 1234 bulur |
| {2,} | 2 ya da daha fazla | a{2,}; aa ve aaaa bulur |
| *? +? ?? | Tembel: olabildiğince az | <.+?>; <b> ve </b>'yi ayrı ayrı bulur |
| ^ | Metnin başı (m bayrağıyla satırın başı) | ^Hata, sadece baştaki Hata'yı bulur |
| $ | Metnin sonu (m bayrağıyla satırın sonu) | \.pdf$, .pdf ile biten adları bulur |
| (abc) | Yakalayan grup, $1 olarak kullanılır | (\d{4})-(\d{2}) yılı ve ayı yakalar |
| (?:abc) | Yakalamayan grup | (?:ab)+; ababab bulur |
| (?<yil>\d{4}) | Adlı grup, $<yil> olarak kullanılır | Grup tablosunda yil adıyla görünür |
| a|b | a ya da b | kedi|köpek ikisinden birini bulur |
| (?=x) (?!x) | Ardından x gelen, x gelmeyen | \d+(?=px), 16px içinde 16'yı bulur |
| (?<=x) (?<!x) | Öncesinde x olan, x olmayan | (?<=₺)\d+, ₺25 içinde 25'i bulur |
Bayraklar
Bayraklar desenin tamamının davranışını değiştirir. Test aracında desenin yanındaki onay kutularıdır; JavaScript kodunda kapanış eğik çizgisinden sonra yazılır, örneğin /kedi/gi.
- g (global): ilk eşleşmede durmak yerine hepsini bulur. Hepsini değiştirmek için gerekir.
- i (büyük küçük harf duyarsız): Kedi, KEDI ve kedi aynı sayılır. Dikkat: eşleştirme Türkçe kurala göre yapılmaz; KEDİ ile kedi, ı ile I eşleşmez. Gerekirse [iİ] ya da [ıI] gibi sınıflar yaz.
- m (çok satır): ^ ve $ her satırın başında ve sonunda eşleşir. Loglar ve listeler için kullan.
- s (dotAll): nokta satır sonunu da yakalar, böylece .* satırlar arasında uzanabilir.
- u (Unicode): \p{L} gibi özellik kaçışlarını açar, emojileri tek karakter sayar ve bilinmeyen kaçışları reddeder.
- y (yapışkan): eşleşme tam olarak bir öncekinin bittiği yerden başlamalı. Çoğunlukla ayrıştırıcı yazarken kullanılır.
E-posta, telefon ve tarih için denenmiş desenler
Bu desenler geçerli ve geçersiz örneklerle denendi. Bir form alanının tamamını doğrularken başa ^, sona $ ekle; uzun bir metnin içinde ararken ekleme.
E-posta: [\w.+-]+@[\w-]+(\.[\w-]+)+ deseni ayse.yilmaz+bulten@mail.ornek.com.tr ve a@b.co adreslerini kabul eder, ben@localhost'u ise alan adında nokta olmadığı için reddeder. Test aracındaki Hazır desenler altında E-posta olarak bulunur. \w Türkçe harfleri kapsamadığı için şükrü@ornek.com gibi bir adresi de reddeder; gerçek hayatta neredeyse tüm adresler ASCII olduğundan bu genelde sorun olmaz. Hiçbir regex bir adresin gerçekten var olduğunu kanıtlayamaz; bunun için onay e-postası gönder.
Türkiye cep telefonu: (\+90|0)?\s?5\d{2}\s?\d{3}\s?\d{2}\s?\d{2} deseni 0532 123 45 67, +90 532 123 45 67 ve 5321234567 yazımlarını kabul eder, 0212 ile başlayan sabit hattı reddeder. Uluslararası E.164 biçimi için \+[1-9]\d{6,14} kullan: artı, ülke kodu ve toplam en fazla 15 rakam; SMS ve arama servisleri bu biçimi ister. Numarayı kaydetmeden önce rakam dışındaki her şeyi silerek tek tip hale getir. Metin içinde +44 20 7946 0958 ya da +1 (555) 123-4567 gibi farklı ülkelerden numaraları bulmak için test aracındaki Hazır desenler altında Telefon desenini kullan.
ISO tarih (YYYY-AA-GG): \d{4}-\d{2}-\d{2} tarihe benzeyen her şeyi bulur. Daha sıkı olan (19|20)\d{2}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01]) deseni 13. ayı ve 00. günü reddeder ama 2026-02-31'i yine kabul eder. Regex biçimi kontrol eder; günün gerçekten var olup olmadığını dilinin tarih fonksiyonlarıyla kontrol et.
Tarihi Türkçe biçime çevirmek için (\d{4})-(\d{2})-(\d{2}) ile ara, Şununla değiştir kutusunu işaretle, yanındaki alana $3.$2.$1 yaz: 2026-10-26, 26.10.2026 olur.
Sık yapılan hatalar ve çözümleri
- Noktayı kaçırmamak: ornek.com deseni ornekXcom'u da bulur. ornek\.com yaz.
- Açgözlü eşleşme: <b>kalın</b> üzerinde <.+> tüm metni alır. Tembel <.+?> ya da <[^>]+> kullan.
- Doğrulamada çapa unutmak: \d{5}, abc12345xyz içinde beş rakam bulduğu için onu da kabul eder. ^\d{5}$ kullan.
- \w'nin ç, ğ, ı, ö, ş, ü'yü bulmasını beklemek: u bayrağı olmadan sadece A-Z, a-z, 0-9 ve _ demektir. Türkçe isimler için u bayrağıyla \p{L} kullan.
- g bayrağını unutmak: değiştirme sadece ilk eşleşmeyi değiştirir, test aracı da tek eşleşme gösterir.
- (a+)+ ya da (\w+\s?)+$ gibi iç içe niceleyiciler: bazı girdilerde süre üstel olarak artar (felaket geri izleme). Test aracı deseni 1,5 saniyede durdurup haber verir; her parçanın tek bir şekilde eşleşebileceği biçimde yeniden yaz.
- HTML ya da JSON'u regex ile ayrıştırmak: hızlı arama için olur, gerçek ayrıştırma için güvenilmez. İç içe yapılar için ayrıştırıcı kullan.
Deseni adım adım kurmak
Aradığın metnin birebir bir parçasıyla başla, örneğin 2026-10-26, ve eşleştiğini gör. Sonra parçaları tek tek sınıflarla değiştir: \d{4}-10-26, ardından \d{4}-\d{2}-\d{2}. Her değişiklikten sonra test metninde başka nelerin renklendiğine bak ve eşleşmemesi gereken birkaç satır ekle. İyi bir test metni hem istediğin durumları hem de kıl payı kaçanları içerir.
Eşleşmeler tablosu her eşleşmenin konumunu ve tüm yakalanan grupları gösterir. Bir grup yanlış parçayı gösteriyorsa parantezleri kaydır. Desen çalışınca olduğu gibi koduna kopyala: JavaScript ve test aracı aynı motoru kullandığı için sonuç birebir aynı olur.