Regex Yazmaya Yeni Başlayanlar İçin Rehber
Regex, metin içinde belirli bir kalıbı aramak için kullanılan kısa ama yoğun bir dil; ilk bakışta göz korkutucu görünse de birkaç temel sembolü öğrenmek çoğu günlük ihtiyacı karşılıyor.
Özet
Regex, metin içinde belirli bir kalıbı aramak için kullanılan kısa ama yoğun bir dil; ilk bakışta göz korkutucu görünse de birkaç temel sembolü öğrenmek çoğu günlük ihtiyacı karşılıyor.
Adım adım
- En sık kullanılan birkaç sembolle başla: nokta herhangi bir karakteri, yıldız tekrarı, köşeli parantez karakter kümesini temsil eder.
- Basit bir hedefle pratik yap, mesela bir metindeki tüm e-posta adreslerini bulmayı dene.
- Yazdığın deseni bir test aracında canlı olarak dene, hangi kısmın eşleştiğini görsel olarak gör.
- Karmaşık bir desen yazmadan önce gerçekten regex mi gerekiyor yoksa basit bir metin fonksiyonu yeterli mi diye düşün; regex her zaman en basit çözüm değil.
Neden önemli?
Regex, yüzlerce satırlık bir metinde elle saatler sürecek bir aramayı tek bir satırla yapmanı sağlar: bir log dosyasındaki tüm hata kodlarını bulmak, bir tablodaki telefon numaralarını aynı biçime getirmek ya da bir form alanının doğru biçimde doldurulup doldurulmadığını kontrol etmek gibi. Ama yanlış yazılmış bir desen de aynı hızla yanlış sonuç üretir; fark etmeden fazla şeyi siler ya da önemli bir satırı kaçırır. Bu yüzden ne kadar yazdığın değil, ne kadar test ettiğin önemlidir.
Bilmen gereken birkaç kavram daha
- Çapalar: ^ satırın başını, $ satırın sonunu gösterir. Bir alanın tamamen bir desene uyup uymadığını kontrol ederken bunlar olmadan desen metnin herhangi bir yerinde eşleşir.
- Kaçış: nokta özel bir karakter olduğu için gerçek bir noktayı aramak istiyorsan önüne ters eğik çizgi koyman gerekir. Aynısı parantez, artı ve soru işareti için de geçerli.
- Açgözlü ve tembel eşleşme: yıldız ve artı varsayılan olarak olabildiğince çok karakter alır. Arkalarına soru işareti eklersen mümkün olan en kısa eşleşmeyi seçerler.
- Bayraklar: büyük küçük harf duyarsız arama veya çok satırlı mod gibi ayarlar desenin davranışını değiştirir.
- Kısayollar: \d rakamı, \s boşluk karakterini, \w harf, rakam ve alt çizgiyi temsil eder.
Sık yapılan hatalar
- Bir dilde çalışan deseni başka bir dilde aynen kullanmak. JavaScript, Python ve veritabanı motorlarının desteklediği özellikler farklılaşabilir.
- \w kısayolunun Türkçe karakterleri her ortamda kapsadığını varsaymak. ş, ğ, ı gibi harfler bazı motorlarda eşleşmez.
- İç içe tekrarlar içeren desenler yazmak. Bazı girdilerde motor çok uzun süre takılabilir.
- Tüm geçerli e-posta adreslerini tek bir kusursuz desenle yakalamaya çalışmak. Pratikte basit bir kontrol ve doğrulama e-postası daha sağlıklıdır.
Örnek bir senaryo
Bir müşteri listesinde telefon numaraları karışık yazılmış: kimi boşluklu, kimi tireli, kimi başında sıfırla. Hepsini aynı biçime getirmek istiyorsun. Önce boşluk, tire ve parantez gibi rakam olmayan karakterleri bulan bir desenle bunları temizliyorsun. Ardından başta sıfır olup olmadığını ^ çapasıyla kontrol eden ikinci bir desen yazıyorsun. Her adımı listenin tamamına uygulamadan önce test aracında on kadar farklı örnek satırla deniyor, beklenmeyen bir satır çıkarsa deseni orada düzeltiyorsun.
Ne zaman regex kullanmamalı?
HTML, JSON veya XML gibi iç içe yapıları regex ile ayrıştırmaya çalışmak genellikle kırılgan sonuç verir; bunlar için dilin kendi ayrıştırıcısını kullan. Tarih, para birimi veya adres gibi verilerde de mümkünse hazır doğrulama kütüphaneleri daha güvenilirdir.