webtrajans
tr

Regex (düzenli ifadeler) nedir ve nasıl kullanılır?

Düzenli ifadeler, metin içinde belirli kalıpları bulmak, doğrulamak ve değiştirmek için kullanılan kısa ama güçlü bir dildir. Temel söz dizimini, pratik Türkiye örneklerini ve sık düşülen tuzakları anlatıyoruz.

Güncellendi: 5 dk okuma

Düzenli ifadeler (regular expressions, kısaca regex), metin içinde belirli bir kalıba uyan parçaları tarif etmenin standart yoludur. Bir formdaki telefon numarasının doğru biçimde girilip girilmediğini kontrol etmek, binlerce satırlık bir log dosyasından IP adreslerini ayıklamak veya bir metindeki tüm tarihleri başka biçime çevirmek regex ile birkaç karakterle yapılabilir. İlk bakışta karmaşık görünse de birkaç temel yapı taşını öğrenmek çoğu iş için yeterlidir. Örnekleri denemek için regex test aracımızı kullanabilirsiniz.

Temel yapı taşları

Karakterler ve karakter sınıfları

İfade Anlamı Örnek eşleşme
abc Tam olarak “abc” abc
. Satır sonu dışında herhangi bir karakter a, 5, ?
[abc] a, b veya c b
[^abc] a, b, c dışındaki karakter x
[a-z] a ile z arasındaki küçük harf k
\d Rakam (0–9) 7
\w Harf, rakam veya alt çizgi (genellikle yalnızca İngilizce harfler) a, 3, _
\s Boşluk, sekme, satır sonu “ “
\D, \W, \S Yukarıdakilerin tersi

Özel anlamı olan karakterleri (. * + ? ( ) [ ] { } ^ $ | \) harfiyen aramak için önüne ters bölü koyun: \. gerçek bir nokta arar.

Niceleyiciler

İfade Anlamı
* 0 veya daha fazla
+ 1 veya daha fazla
? 0 veya 1 (isteğe bağlı)
{3} Tam 3 kez
{2,4} 2 ile 4 arası
{2,} En az 2

Çapalar ve sınırlar

İfade Anlamı
^ Satırın/metnin başı
$ Satırın/metnin sonu
\b Kelime sınırı

Doğrulama yaparken kalıbı ^ ve $ arasına almak çok önemlidir; aksi halde \d{5} ifadesi “abc123456xyz” içinde de eşleşme bulur.

Gruplar ve alternatifler

  • (abc) → yakalayan grup; eşleşen parçayı daha sonra kullanmanızı sağlar.
  • (?:abc) → yakalamayan grup; yalnızca gruplamak için.
  • (?<yil>\d{4}) → adlandırılmış grup.
  • kedi|köpek → “kedi” veya “köpek”.

Bayraklar (flags)

Bayrak Anlamı
g Global: tüm eşleşmeleri bul, ilkinde durma
i Büyük-küçük harf duyarsız
m Çok satırlı: ^ ve $ her satırın başı ve sonu olur
s . satır sonunu da eşleştirir
u Unicode modu (JavaScript); \p{L} gibi ifadeleri etkinleştirir

Türkiye’ye özgü pratik örnekler

Cep telefonu numarası

^(?:\+90|0)?5\d{9}$

“05321234567”, “+905321234567” ve “5321234567” biçimlerini kabul eder. Kullanıcılar boşluk ve tire de girebileceği için doğrulamadan önce bunları silmek pratik bir yaklaşımdır.

T.C. kimlik numarası (yalnızca biçim)

^[1-9]\d{10}$

11 haneli ve sıfırla başlamayan sayıları kabul eder. Kimlik numarasının son iki hanesi bir algoritmayla hesaplandığı için gerçek doğrulama regex ile değil, bu algoritmayla yapılır; bunun için T.C. kimlik no doğrulama aracını kullanabilirsiniz.

Posta kodu

^(0[1-9]|[1-7]\d|8[01])\d{3}$

Türkiye’de posta kodları 5 hanelidir ve ilk iki hane il plaka koduna (01–81) karşılık gelir.

Tarih (GG.AA.YYYY)

^(0[1-9]|[12]\d|3[01])\.(0[1-9]|1[0-2])\.(19|20)\d{2}$

“08.10.2026” gibi tarihleri kabul eder. 31.02.2026 gibi takvimde olmayan tarihleri ayırt edemez; o kontrolü kodda yapın.

Basit e-posta kontrolü

^[^\s@]+@[^\s@]+\.[^\s@]{2,}$

Boşluk içermeyen, tek @ işaretli ve noktalı bir alan adı olan adresleri kabul eder. Kesin doğrulama için onay e-postası gönderin.

IBAN biçimi

^TR\d{24}$

Boşluklar silindikten sonra TR ile başlayan 26 karakterlik biçimi kontrol eder. Kontrol basamaklarının doğruluğu ayrıca hesaplanmalıdır; ayrıntılar IBAN rehberimizde.

Türkçe karakterler ve büyük-küçük harf sorunu

  • \w ve [a-z] Türkçe harfleri (ç, ğ, ı, ö, ş, ü) kapsamaz. Açıkça yazın: [a-zçğıöşü].
  • Unicode destekli motorlarda \p{L} tüm dillerdeki harfleri kapsar (JavaScript’te u bayrağıyla).
  • i bayrağı büyük-küçük harf eşleştirmesini genellikle İngilizce kurallarına göre yapar: İ ile i ve I ile ı eşleşmesi beklediğiniz gibi çalışmayabilir. Türkçe metinlerde iki biçimi de sınıfa eklemek en güvenli yoldur: [iİ], [ıI].

Açgözlü ve tembel eşleşme

Metin: <b>kalın</b> ve <b>yine kalın</b>

  • <b>.*</b> → açgözlü; ilk <b>’den son </b>’ye kadar her şeyi alır.
  • <b>.*?</b> → tembel; her <b>…</b> çiftini ayrı ayrı eşleştirir.

Bununla birlikte, HTML gibi iç içe yapıları regex ile ayrıştırmak kırılgandır; ciddi işler için bir HTML ayrıştırıcı kullanın.

Bul ve değiştir örneği

Tarihleri “GG.AA.YYYY” biçiminden “YYYY-AA-GG” biçimine çevirmek:

'08.10.2026'.replace(/(\d{2})\.(\d{2})\.(\d{4})/, '$3-$2-$1');
// '2026-10-08'

Aynı mantık VS Code, Notepad++ ve çoğu editörün “regex ile bul-değiştir” özelliğinde de çalışır. URL yönlendirme kurallarında regex kullanımına 301-302 yönlendirme rehberimizde değindik.

Regex’i adım adım yazmak

Karmaşık bir kalıbı tek seferde yazmaya çalışmak yerine parça parça ilerleyin:

  1. Eşleşmesi gereken ve eşleşmemesi gereken örneklerden bir liste hazırlayın.
  2. En basit kalıpla başlayın (\d+), ardından kısıtları ekleyin (^\d{5}$).
  3. Her adımda test aracında tüm örnekleri deneyin.
  4. Kalıp tamamlandığında, yanına ne yaptığını açıklayan kısa bir yorum ekleyin.

Bu yaklaşım hem hataları erken yakalar hem de kalıbı daha sonra okuyacak kişinin işini kolaylaştırır. Metin listelerinde tekrar eden satırları silmek veya sıralamak gibi basit işler için regex yazmak yerine satır sıralama ve tekrar silme aracını kullanmak daha hızlı olabilir.

Sık yapılan hatalar

  • Çapaları unutmak: Doğrulamada ^...$ kullanılmazsa kısmi eşleşme kabul edilir.
  • Noktayı kaçırmamak: . her karakteri eşleştirir; gerçek nokta için \. yazın.
  • Aşırı karmaşık kalıplar: Okunamayan regex bakımı zor ve hatalıdır; gerekirse işi birkaç adıma bölün.
  • Felaket geri izleme (catastrophic backtracking): (a+)+$ gibi iç içe niceleyiciler bazı girdilerde motoru kilitleyebilir.
  • Motor farklarını göz ardı etmek: JavaScript, Python, PCRE ve .NET arasında küçük söz dizimi farkları vardır.

Sık sorulan sorular

Regex ne işe yarar?

Form doğrulama (e-posta, telefon, posta kodu), metin içinde arama ve toplu değiştirme, log dosyalarından veri çıkarma ve URL yönlendirme kuralları gibi işlerde kullanılır. Neredeyse tüm programlama dilleri ve metin editörleri regex destekler.

Açgözlü (greedy) ve tembel (lazy) eşleşme farkı nedir?

Açgözlü niceleyiciler (*, +) mümkün olan en uzun metni, tembel niceleyiciler (*?, +?) mümkün olan en kısa metni eşleştirir. HTML etiketleri gibi tekrar eden yapılarda tembel eşleşme genellikle istenen sonucu verir.

Regex'te Türkçe karakterler nasıl eşleştirilir?

\w çoğu motorda yalnızca İngilizce harfleri kapsar. Türkçe harfler için [a-zA-ZçğıöşüÇĞİÖŞÜ] gibi açık bir karakter sınıfı veya Unicode destekli motorlarda \p{L} kullanın.

E-posta adresini regex ile tam doğrulamak mümkün mü?

Standarda tam uyan bir regex çok karmaşıktır ve pratikte gereksizdir. Basit bir biçim kontrolü yapıp asıl doğrulamayı adrese onay e-postası göndererek yapmak en güvenilir yöntemdir.

İlgili rehberler