Regex (Düzenli İfade) Nedir, Nasıl Yazılır?
"Regex" kelimesini bir hata mesajında, bir form doğrulama kodunda veya bir arkadaşınızın "şu deseni yazamıyorum" şikayetinde duymuş olabilirsiniz. Aslında göründüğü kadar korkutucu değil: birkaç sembolü öğrendiğinizde neredeyse her metin örüntüsünü tarif edebilirsiniz. Bu rehberde regex'in ne olduğunu, ne işe yaradığını ve sıfırdan bir desenin 5 adımda nasıl yazılacağını gerçek bir örnek üzerinden gösteriyoruz.
Regex (düzenli ifade) nedir?
\d{11} "art arda 11 rakam" demektir. Regex; form doğrulama, arama-değiştirme, log analizi ve veri ayıklama gibi işlerde neredeyse tüm programlama dillerinde benzer sözdizimiyle kullanılır.
Regex'i bir "arama şablonu dili" gibi düşünebilirsiniz. Normal arama ("Ctrl+F") yalnızca birebir aynı metni bulur; regex ise "3 harften sonra bir tire, sonra 4 rakam" gibi kural tabanlı aramalar yapmanızı sağlar. Bu yüzden e-posta adreslerini, telefon numaralarını, tarihleri veya belirli bir formattaki kod satırlarını tek bir desenle yakalayabilirsiniz.
Regex nerede kullanılır?
Regex, yazılım geliştirmenin hemen her aşamasında karşınıza çıkar. En yaygın kullanım alanları:
- Form doğrulama: E-posta, telefon, TC kimlik, şifre gücü gibi alanların biçimini kontrol etmek.
- Arama ve bul-değiştir: Kodda veya bir metinde tekrar eden bir kalıbı toplu değiştirmek.
- Log/veri analizi: Sunucu loglarından IP, tarih veya hata kodu gibi parçaları ayıklamak.
- Veri temizleme: Tutarsız formatlı telefon/tarih verilerini standart bir kalıba dönüştürmek.
- URL yönlendirme: Framework'lerde
/urunler/(\d+)gibi desenlerle dinamik adresleri eşleştirmek.
Regex nasıl yazılır? 5 adımda desen kurma
\d, \w) ifade edin, (4) tekrar sayısını nicelik belirteciyle (+, {n,m}) belirtin, (5) çapa (^ $) ekleyip gerçek verilerle test edin.
Bu adımları sırayla açalım:
- İhtiyacı somutlaştırın. "Bir telefon numarası" yetersizdir; "05XX XXX XX XX biçiminde, 0/+90 opsiyonel, 10-11 hane" gibi net bir tarif yazın ve eşleşmemesi gereken örnekleri de not edin.
- Sabit karakterleri yazın. Değişmeyen kısımlar (bir
@, tire, nokta) deseninize olduğu gibi yazılır. Özel bir karakteri (. * + ? ( ) [ ]) harfiyen aramak için başına\koyarak "kaçış" yapın — ör. gerçek nokta için\.. - Değişken kısımları karakter sınıfıyla değiştirin. Rakam için
\d, harf/rakam/alt çizgi için\w, boşluk için\s, belirli bir küme için[a-z0-9]kullanın. - Nicelik belirteci ekleyin. Tekrar sayısını belirtin:
?(0/1),*(0+),+(1+),{n,m}(n-m arası). Bunsuz her sembol yalnızca bir kez aranır. - Çapa ekleyin ve test edin. Metnin tamamına uyması için başına
^, sonuna$koyun; ardından Regex Test Aracı'nda gerçek örneklere karşı deneyin.
Bilmeniz gereken temel semboller
Regex öğrenmeye başlarken aşağıdaki tabloda yer alan az sayıda sembolü bilmek çoğu günlük ihtiyacı karşılar. Sembollerin tam bir listesi için Regex Cheat Sheet yazımıza bakabilirsiniz.
| Sembol | Anlamı | Örnek |
|---|---|---|
| \d | Rakam (0-9) | \d{4} → "2026" |
| \w | Kelime karakteri (harf/rakam/_) | \w+ → "merhaba_123" |
| \s | Boşluk (space/tab/satır sonu) | \s+ → " " |
| . | Yeni satır hariç herhangi bir karakter | a.c → "abc", "axc" |
| ^ $ | Metin başı ve sonu (çapa) | ^abc$ → tam "abc" |
| * + ? {n,m} | Tekrar (nicelik) belirteçleri | a{2,4} → "aa".."aaaa" |
| (...) | Yakalama grubu — eşleşen kısmı ayırır | (\d+)-(\d+) |
Öğrendiklerinizi hemen deneyin
Yukarıdaki sembolleri canlı test aracında yazın, kendi test metninizle deneyin; eşleşmeler anında renkli vurgulanır ve deseniniz "Açıkla" sekmesinde parça parça anlatılır.
Regex Test Aracını Aç →Uygulamalı örnek: TC kimlik regex'i sıfırdan yazmak
^[1-9][0-9]{10}$'dır. Bu desen yalnızca uzunluk ve ilk hane kuralını kontrol eder; gerçek TC kimlik numarasının geçerliliği 10. ve 11. hanelerin özel bir algoritmayla hesaplanmasını gerektirir ve regex ile tek başına doğrulanamaz.
5 adımı bu örnek üzerinde uygulayalım:
- İhtiyaç: "Tam olarak 11 rakam, ilk rakam 0 olamaz" (eşleşmemesi gerekenler: 10 haneli bir sayı, 0 ile başlayan bir sayı, harf içeren bir dizi).
- Sabit karakter: Bu örnekte sabit bir karakter yok, tamamı değişken rakamlardan oluşuyor.
- Karakter sınıfı: İlk hane için "0 hariç rakam" anlamına gelen
[1-9], kalan haneler için "0-9 arası herhangi bir rakam" anlamına gelen[0-9](ya da\d). - Nicelik belirteci: İlk haneden sonra tam olarak 10 rakam daha gelmesi gerektiği için
{10}yazılır:[1-9][0-9]{10}. - Çapa ve test: Deseni metnin tamamına uygulamak için başına
^, sonuna$eklenir:^[1-9][0-9]{10}$. Bu araçta hazır TC Kimlik şablonunu seçip "12345678950" gibi örneklerle test edebilirsiniz.
Regex yazarken sık yapılan hatalar
Yeni başlayanların en sık düştüğü tuzaklar şunlardır:
- Çapa unutmak:
^/$olmadan desen metnin herhangi bir yerinde eşleşebilir; "tam olarak bu" yerine "bunu içeren" bir sonuç alırsınız. - Nokta'yı kaçırmamak:
."herhangi bir karakter" demektir; gerçek nokta için\.yazılmalıdır, yoksasite.comyanlışlıkla "siteXcom" ile de eşleşir. - Greedy/lazy karışıklığı:
*/+varsayılan "açgözlü"dür; en kısa eşleşme için sonuna?eklenerek "tembel" (*?) yapılmalıdır. - Yalnızca pozitif örneklerle test etmek: Eşleşmemesi gereken örnekleri de deneyip yanlışlıkla eşleşip eşleşmediğini kontrol edin.
- Dil farklarını göz ardı etmek: Named group ve ileri bakış gibi özelliklerde diller arası küçük farklar vardır; kodu hedef dilde ayrıca test edin.
Sık sorulan sorular
Regex (düzenli ifade) nedir?
Regex nasıl yazılır, nereden başlamalı?
Regex'te en çok karıştırılan semboller nelerdir?
. (herhangi bir karakter, gerçek nokta için \. gerekir), greedy/lazy niceleyici farkı ve (…) yakalama grubu ile (?:…) yakalamayan grup arasındaki fark en sık karıştırılan noktalardır.