Regex (Düzenli İfade) Nedir? Nasıl Çalışır, Türleri ve Kullanım Alanları
Regex (Düzenli İfade), metin içinde belirli desenleri aramak, bulmak, doğrulamak ve değiştirmek için özel karakterlerle oluşturulan bir söz dizimi sistemidir. Programlama, veri işleme, log analizi ve metin işlemedeki en güçlü araçlardan biridir. Neredeyse tüm modern yazılım dillerinde (Python, JavaScript, Java, PHP, C#, Go vb.) yerleşik olarak desteklenir.
Regex (Düzenli İfade), metin içinde belirli desenleri aramak, bulmak, doğrulamak ve değiştirmek için özel karakterlerle oluşturulan bir söz dizimi sistemidir. Programlama, veri işleme, log analizi ve metin işlemedeki en güçlü araçlardan biridir. Neredeyse tüm modern yazılım dillerinde (Python, JavaScript, Java, PHP, C#, Go vb.) yerleşik olarak desteklenir.
Regex Nasıl Çalışır?
Regex, kullanıcının tanımladığı desene göre metni karakter karakter tarar. Desende bulunan semboller özel anlamlar taşır:
- . — Herhangi bir tek karakteri temsil eder (satır sonu hariç)
- * — Öncesindeki karakterin 0 veya daha fazla tekrarı anlamına gelir
- + — Öncesindeki karakterin 1 veya daha fazla tekrarı anlamına gelir
- ? — Öncesindeki karakterin 0 veya 1 tekrarı anlamına gelir (opsiyonel)
- [abc] — Köşeli parantez içindeki herhangi bir karakterle eşleşir
- [^abc] — Köşeli parantez içinde olmayan herhangi bir karakterle eşleşir
- ^ — Metni başından eşleştirme başlar
- $ — Metni sonundan eşleştirme başlar
- \d — Herhangi bir rakam (0-9)
- \w — Herhangi bir kelime karakteri (harf, rakam, alt çizgi)
- \s — Herhangi bir boşluk karakteri (boşluk, sekme, satır sonu)
Örneğin ^\d{3}-\d{3}-\d{4}$ regex deseni, 123-456-7890 formatında bir telefon numarasıyla eşleşir. Desen başında üç rakam, ortasında üç rakam, sonunda dört rakam gerektirir.
Regex'in Avantajları
- Hız: Milyonlarca karakterli metinlerde saniyeler içinde arama ve değiştirme yapabilir
- Esneklik: Karmaşık desenleri basit şekilde ifade edebilir
- Evrensellik: Neredeyse tüm programlama dillerinde aynı şekilde çalışır
- Otomatikleştirme: Manuel kontrol yerine otomatik veri doğrulama sağlar
- Güvenlik: E-posta, şifre, URL gibi girdilerin doğru formatını kontrol edebilir
Regex'in Dezavantajları
- Öğrenme Eğrisi: Özel sembol ve kuralları öğrenmek başlangıçta karmaşık görünür
- Okunabilirlik: Karmaşık regex desenleri ilk bakışta anlaşılması zor olabilir
- Performans Sorunları: Yanlış yazılmış regex, aşırı döngüler oluşturarak sistem kaynaklarını tüketebilir (ReDoS – Regular Expression Denial of Service)
- Sınırlı Dil Desteği: Türkçe karakterli (ç, ğ, ı, ö, ş, ü) desenlerde farklı kütüphaneler farklı davranabilir
- Bakım Zorluğu: Uzun regex ifadeleri, zaman içinde okuması ve güncellemesi güçleşir
Regex Nerede Kullanılır?
Regex, yazılım geliştirme ve veri işlemede geniş bir yelpazede uygulanır:
| Kullanım Alanı | Örnek |
|---|---|
| E-posta Doğrulama | ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ |
| Telefon Numarası Kontrol | ^\+?[\d\s\-()]{7,15}$ |
| URL Doğrulama | ^https?://[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ |
| Şifre Kontrol | ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$ |
| Log Analizi | Hata kodları, IP adresleri, zaman damgaları ayıklanır |
| Veri Temizleme | Gereksiz boşluklar, özel karakterler, formatlanmamış veriler kaldırılır |
| HTML/XML Ayrıştırma | Etiketlerin bulunması ve ayıklanması |
| Metin Arama ve Değiştirme | Kod editörleri, metin editörleri, IDE'ler |
Regex Türleri ve Standartları
Regex kullanımı ve söz dizimi, farklı standartlara göre değişebilir:
- POSIX Basic (BRE): En basit ve sınırlı regex standardı. Eski Unix araçlarında kullanılır
- POSIX Extended (ERE): BRE'den daha gelişmiş, grep -E, awk gibi araçlarda kullanılır
- Perl Compatible Regular Expression (PCRE): En güçlü ve kapsamlı standart. PHP, Python, JavaScript gibi modern dillerde tercih edilir
- JavaScript RegExp: Tarayıcılarda ve Node.js'de çalışan regex motoru
- Python re module: Python'un kendi regex kütüphanesi
- .NET Framework Regex: C#, Visual Basic ve diğer .NET dilleri için optimize edilmiş
Regex Tarihçesi
Düzenli ifadelerin temelleri 1950'lere kadar uzanır. Matematikçi Stephen Cole Kleene, biçimsel diller teorisinde desenleri tanımlamak için "regular expression" terimini ortaya koyduktan sonra, 1970'lerde Ken Thompson Unix editöründe (ed) regex özelliğini uygulamıştır. 1987 yılında Perl programlama dili regex'i daha güçlü ve esnek hale getirerek, günümüzün PCRE standardının temelini oluşturmuştur.
Regex Yazarken Önemli İpuçları
- Baştan başla: ^ ve sonda bitir: $ sembollerini kullanarak eksik eşleşmeleri önleyin
- Escape karakterleri kullanın: Özel anlamı olan karakterleri arama istiyorsanız (örn. .) önüne backslash (\) koyun
- Greedy ve Non-greedy kullanın: * ve + varsayılan olarak greedy'dir (maks. eşleşme); ? ekleyerek non-greedy yapabilirsiniz (*?, +?)
- Grupları parantezle belirleyin: (abc) gruplaması, alt desenleri kontrol etmenizi sağlar
- Test araçları kullanın: regex101.com, regexr.com gibi çevrimiçi testçilerde oluşturduğunuz deseni doğrulayın
- Karakterler arası aralık tanımlayın: [a-z] veya [0-9] yerine \w ve \d kısa formlarını tercih edin
"Regex ile sorununuz var. Şimdi iki probleminiz var." — Jamie Zawinski, Netscape ingenieur
Bu ünlü söz, regex'in çoğu zaman öğrenme maliyetinin yüksek olduğunu ve yanlış kullanıldığında ek sorunlar yaratabildiğini ifade eder. Ancak doğru şekilde öğrenildiğinde regex, veri doğrulama ve metin işlemede vazgeçilmez bir araç haline gelir.
FAQ