/.*/">
Başlangıç Yayın: 17 Temmuz 2026 8 dk okuma

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?

Kısa cevap Regex (regular expression / düzenli ifade), bir metin içinde belirli bir örüntüyü (kalıbı) tanımlamak için kullanılan özel bir sözdizimidir. Örneğin \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

Kısa cevap Bir regex yazarken sırasıyla şu 5 adımı izleyin: (1) eşleşmesi/eşleşmemesi gereken örnekleri yan yana yazın, (2) sabit karakterleri olduğu gibi yazın, (3) değişken kısımları karakter sınıfıyla (\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:

  1. İ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.
  2. 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 \..
  3. 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.
  4. 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.
  5. Ç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.
Pratik ipucu Karmaşık bir regex'i tek seferde yazmaya çalışmayın. Önce en dar ve en kesin parçayı (ör. sabit bir alan kodu) yazıp test edin, sonra parça parça genişletin. Her ekleme sonrası deseni gerçek pozitif VE negatif örneklerle (eşleşmemesi gerekenlerle) tekrar test etmek, "aşırı geniş" bir deseni erken yakalamanızı sağlar.

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.

Regex'e başlarken bilinmesi gereken temel semboller
SembolAnlamıÖrnek
\dRakam (0-9)\d{4} → "2026"
\wKelime karakteri (harf/rakam/_)\w+ → "merhaba_123"
\sBoşluk (space/tab/satır sonu)\s+ → " "
.Yeni satır hariç herhangi bir karaktera.c → "abc", "axc"
^ $Metin başı ve sonu (çapa)^abc$ → tam "abc"
* + ? {n,m}Tekrar (nicelik) belirteçleria{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

Kısa cevap TC kimlik numarasının biçimini (11 hane, ilk hane 0 olamaz) doğrulayan regex ^[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:

  1. İ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).
  2. Sabit karakter: Bu örnekte sabit bir karakter yok, tamamı değişken rakamlardan oluşuyor.
  3. 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).
  4. Nicelik belirteci: İlk haneden sonra tam olarak 10 rakam daha gelmesi gerektiği için {10} yazılır: [1-9][0-9]{10}.
  5. Ç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.
Neden regex tek başına yeterli değil? Regex yalnızca biçimi (karakter kümesi, uzunluk, sıralama) kontrol edebilir; TC kimlik veya IBAN gibi numaraların gerçek geçerliliği bir kontrol basamağı (checksum) algoritmasına dayanır ve bu algoritma regex sözdiziminde ifade edilemez. Böyle durumlarda regex ile hızlı bir ön-eleme yapıp ardından algoritmik kontrolü ayrıca uygulamak gerekir. Türkçe hazır kalıpların tam listesi ve bu tuzaklar için Türkçe Regex Örnekleri yazımıza bakabilirsiniz.

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, yoksa site.com yanlış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, bir metin içinde belirli bir örüntüyü tanımlamak için kullanılan özel bir sözdizimidir. Sabit karakterler, karakter sınıfları (\d, \w, \s) ve nicelik belirteçleri (*, +, {n,m}) bir araya gelerek bir kalıp oluşturur.
Regex nasıl yazılır, nereden başlamalı?
Önce eşleşmesi/eşleşmemesi gereken örnekleri yazın, sabit karakterleri olduğu gibi bırakın, değişken kısımları karakter sınıflarıyla ifade edin, tekrar sayısını nicelik belirteciyle belirtin ve son olarak gerçek verilerle canlı test edin.
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.
Regex öğrenmek zor mu?
Temel semboller birkaç saatte öğrenilir; ileri konular (lookahead/lookbehind, backreference) pratikle birkaç gün içinde oturur. Canlı bir test aracıyla deneme-yanılma en hızlı yoldur.
Regex her programlama dilinde aynı mı çalışır?
Temel sözdizimi çok benzer olsa da named group ve ileri özelliklerde küçük farklar vardır. Bir deseni JavaScript'te test ettikten sonra hedef dilde (Python, PHP, Java) ayrıca doğrulamak gerekir.

İlgili rehberler

Metodoloji & kaynaklar. Bu yazıdaki tüm örnekler, sitenin tarayıcı içi (client-side) çalışan ECMAScript RegExp motoruyla test edilmiştir. Kaynaklar: MDN Web Docs RegExp referansı · ECMA-262 dil şartnamesi. Son güncelleme: 17 Temmuz 2026. Yazı bilgilendirme ve öğretim amaçlıdır; TC kimlik/IBAN gibi resmî numaraların gerçek geçerlilik kontrolü için algoritmik doğrulama şarttır.
Motor: ECMA-262 (JavaScript) RegExp · Şablonlar: TR biçim standartları · Güncelleme: 17 Temmuz 2026
Bilgilendirme ve geliştirme amaçlıdır; kritik doğrulamalarda algoritmik kontrol de kullanın. · RegexTest