Düzenli ifadeler (Regular Expressions veya kısaca Regex), metin içinde belirli kalıpları (pattern) aramak, eşleştirmek ve değiştirmek için kullanılan güçlü bir araçtır. Hemen hemen tüm programlama dillerinde desteklenen regex, form doğrulama, metin ayrıştırma, veri temizleme ve arama-değiştirme gibi işlemlerde vazgeçilmezdir. İlk bakışta karmaşık görünebilir ancak temel kavramları öğrendikten sonra son derece verimli bir araç haline gelir.
Temel Meta Karakterler
Meta karakterler, regex'in yapı taşlarıdır. Özel anlamlar taşırlar:
. → Herhangi bir karakter (yeni satır hariç)
^ → Satır başı
$ → Satır sonu
\ → Escape karakteri (özel karakterin literal anlamı)
| → VEYA operatörü (alternation)
Özel karakterleri literal olarak aramak için önlerine ters eğik çizgi (\) eklenir. Örneğin bir nokta aramak için \. kullanılır.
Niceleyiciler (Quantifiers)
Niceleyiciler, bir karakterin veya grubun kaç kez tekrarlanacağını belirler:
* → 0 veya daha fazla kez
+ → 1 veya daha fazla kez
? → 0 veya 1 kez (isteğe bağlı)
{3} → Tam olarak 3 kez
{2,5} → 2 ile 5 arasında (dahil)
{3,} → 3 veya daha fazla kez
Varsayılan olarak niceleyiciler "açgözlü" (greedy) çalışır — mümkün olan en uzun eşleşmeyi bulurlar. Soru işareti ekleyerek "tembel" (lazy) yapabilirsiniz: *?, +?, ??.
Karakter Sınıfları (Character Classes)
Köşeli parantez içinde tanımlanan karakter sınıfları, belirtilen karakterlerden herhangi birini eşleştirir:
[abc] → a, b veya c karakterlerinden biri
[a-z] → Küçük harfler (a'dan z'ye)
[A-Z] → Büyük harfler
[0-9] → Rakamlar
[a-zA-Z] → Tüm harfler
[^abc] → a, b ve c HARİCİNDE herhangi bir karakter
Ön tanımlı karakter sınıfları daha kısa yazım sağlar:
\d → Rakam [0-9]
\D → Rakam olmayan [^0-9]
\w → Kelime karakteri [a-zA-Z0-9_]
\W → Kelime karakteri olmayan
\s → Boşluk karakteri (space, tab, newline)
\S → Boşluk olmayan karakter
Gruplar ve Yakalama (Groups & Capturing)
Parantezler, ifadeleri gruplamak ve eşleşen parçaları yakalamak için kullanılır:
// Yakalama grubu
(abc) → "abc" ifadesini grupla ve yakala
// Yakalamayan grup (sadece gruplama)
(?:abc) → "abc" ifadesini grupla ama yakalama
// Adlandırılmış grup
(?<isim>abc) → "abc" ifadesini "isim" adıyla yakala
// Geri referans
(\w+)\s\1 → Tekrarlanan kelimeyi bul ("merhaba merhaba")
Yakalanan gruplar, değiştirme işlemlerinde $1, $2 gibi referanslarla kullanılabilir.
Lookahead ve Lookbehind
İleri ve geri bakış ifadeleri, bir konumun belirli bir kalıpla çevrelenip çevrelenmediğini kontrol eder ancak eşleşmeye dahil etmez:
// Positive Lookahead: sonrasında "bar" olan "foo"
foo(?=bar)
// Negative Lookahead: sonrasında "bar" OLMAYAN "foo"
foo(?!bar)
// Positive Lookbehind: öncesinde "foo" olan "bar"
(?<=foo)bar
// Negative Lookbehind: öncesinde "foo" OLMAYAN "bar"
(?<!foo)bar
Örneğin, \d+(?=₺) ifadesi "100₺" metninde "100" ile eşleşir ancak "₺" karakterini dahil etmez.
Bayraklar (Flags)
g → Global: tüm eşleşmeleri bul (yalnızca ilkini değil)
i → Case-insensitive: büyük/küçük harf ayrımı yapma
m → Multiline: ^ ve $ her satırın başı/sonu ile eşleşsin
s → Dotall: . karakteri yeni satırı da eşleştirsin
u → Unicode: tam Unicode desteği
Yaygın Regex Kalıpları
// E-posta doğrulama (basit)
^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,}$
// Telefon numarası (Türkiye)
^(\+90|0)?[5][0-9]{9}$
// URL doğrulama
^https?:\/\/[\w.-]+\.[a-zA-Z]{2,}(\/\S*)?$
// IP adresi (IPv4)
^(\d{1,3}\.){3}\d{1,3}$
// Tarih formatı (GG/AA/YYYY)
^(0[1-9]|[12]\d|3[01])\/(0[1-9]|1[0-2])\/\d{4}$
// Güçlü şifre (en az 8 karakter, büyük/küçük harf, rakam)
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$
Performans İpuçları
- Açgözlü niceleyiciler yerine tembel niceleyiciler kullanarak gereksiz geri izlemeyi (backtracking) azaltın
- Çok genel kalıplardan (
.*) kaçının — mümkün olduğunca spesifik yazın - İç içe niceleyicilerden kaçının (ör.
(a+)+) — felaket düzeyinde geri izlemeye neden olabilir - Sık kullanılan regex'leri derleyin (compile) — tekrarlanan kullanımda performans kazanırsınız
Regex Araçlarını Deneyin
Regex kalıplarınızı gerçek zamanlı olarak test etmek için Regex Test aracımızı, ifadelerinizi görsel olarak anlamak için ise Regex Görselleştirici aracımızı kullanabilirsiniz. Her iki araç da yaygın kalıp örnekleri ve açıklamalar içerir.
Bu konuyla ilgili araçlarımızı da deneyin: Regex Test Aracı, JSON Formatter, cURL Builder