Düzenli İfadeler
Düzenli ifadeler, metin üzerinde arama, doğrulama ve manipülasyon yapmak için kullanılan güçlü desenlerdir. Yazılım geliştirme ve sistem mimarisinde, kullanıcı girişlerini doğrulamak, log dosyalarını analiz etmek, belirli bilgileri çıkarmak ve otomatik metin işleme görevlerini verimli şekilde gerçekleştirmek için kritik öneme sahiptirler. Karmaşık kontrol yapıları ve döngüler yerine düzenli ifadeler kullanmak, kodun daha okunabilir, bakımı kolay ve performanslı olmasını sağlar.
Bu ders kapsamında düzenli ifadelerin temel sözdizimi, veri yapıları, algoritmik mantığı ve nesne yönelimli programlama (OOP) prensipleri üzerinde durulacaktır. Okuyucular, basit doğrulama örneklerinden başlayarak, grup yakalama, ileriye/geriye bakış (lookahead/lookbehind), tekrarlar ve karmaşık metin manipülasyonları gibi ileri seviye konseptlere kadar bilgi sahibi olacaklardır. Ayrıca performans optimizasyonu, bellek kullanımı ve güvenlik konularında dikkat edilmesi gereken noktalar da ele alınacaktır.
Ders sonunda katılımcılar, backend uygulamalarında düzenli ifadeleri güvenli, etkili ve sürdürülebilir bir şekilde kullanabilecek ve gerçek dünya senaryolarında pratik çözümler üretebilecek seviyeye ulaşacaktır.
Temel Örnek
pythonimport re
# Örnek metin
metin = "Kullanıcının e-posta adresi: [[email protected]](mailto:[email protected])"
# E-posta desenini tanımla
desen = r"\[a-zA-Z0-9._%+-]+@\[a-zA-Z0-9.-]+.\[a-zA-Z]{2,}"
# Deseni ara
sonuc = re.search(desen, metin)
if sonuc:
print("E-posta bulundu:", sonuc.group())
else:
print("E-posta bulunamadı")
Bu örnekte Python’un re modülü kullanılmıştır. metin değişkeni e-posta içerir.
Desen şu şekilde açıklanabilir:
- [a-zA-Z0-9._%+-]+: Kullanıcı adını temsil eder; en az bir karakter olmalıdır.
- @: Kullanıcı adı ve domain ayracı.
- [a-zA-Z0-9.-]+: Domain kısmı.
- .[a-zA-Z]{2,}: TLD kısmı (örn. .com, .org).
re.search fonksiyonu metin içinde ilk eşleşmeyi arar. Bulunursa sonuc.group() ile eşleşme elde edilir. Bu örnek, temel doğrulama ve veri çıkarımı işlemlerini gösterir. Ayrıca hatasız bir şekilde regex kullanımı ve eşleşme bulunamaması durumunda nasıl yönetileceği açıklanmıştır.
Pratik Örnek
pythonimport re
class EpostaDogrulayıcı:
def init(self, desen=None):
self.desen = desen or r"\[a-zA-Z0-9._%+-]+@\[a-zA-Z0-9.-]+.\[a-zA-Z]{2,}"
def dogrula(self, eposta):
if not isinstance(eposta, str):
raise TypeError("E-posta bir metin olmalıdır")
return bool(re.fullmatch(self.desen, eposta))
epostalar = \["[[email protected]](mailto:[email protected])", "gecersiz@", "[[email protected]](mailto:[email protected])"]
dogrulayıcı = EpostaDogrulayıcı()
for eposta in epostalar:
try:
if dogrulayıcı.dogrula(eposta):
print(f"{eposta} geçerli")
else:
print(f"{eposta} geçersiz")
except Exception as e:
print(f"{eposta} doğrulanırken hata oluştu: {e}")
Bu örnek, nesne yönelimli programlama yaklaşımı ile düzenli ifadelerin kapsüllenmesini gösterir. dogrula metodu veri tipi kontrolü yapar ve re.fullmatch kullanarak tam eşleşmeyi doğrular.
Uygulanan iyi uygulamalar:
- isinstance ile tip kontrolü: daha güvenli doğrulama.
- re.fullmatch ile tam eşleşme sağlanması.
- try/except ile hata yönetimi: sistemin çökmesini önler.
Bu yaklaşım, backend uygulamalarında modüler, güvenli ve performanslı metin doğrulama çözümleri üretmek için kullanılabilir.
İyi uygulamalar ve yaygın hatalar:
- Desenleri açık ve net tanımlamak, yanlış eşleşmeleri önler.
- Fonksiyon seçiminde dikkatli olmak: re.search, re.match ve re.fullmatch arasındaki farkları bilmek.
- re.compile ile tekrar kullanılan desenleri önceden derleyerek performansı artırmak.
- Döngüler içinde Regex objesi oluşturmak yerine önceden derlenmiş desenleri kullanmak.
- Kullanıcı girişlerini doğrulamak ve istisnaları yönetmek.
- Lazy quantifiers kullanarak backtracking’i azaltmak.
- Çoklu eşleşmeler için re.findall veya re.finditer kullanmak.
Bu yönergeler, bellek sızıntılarını, verimsiz algoritmaları ve çalışma hatalarını önler, güvenli ve optimize metin işleme sağlar.
📊 Referans Tablosu
Element/Concept | Description | Usage Example |
---|---|---|
"." | Yeni satır hariç herhangi bir karakterle eşleşir | re.search(r".", "abc") |
"*" | Önceki karakter sıfır veya daha fazla tekrar | re.search(r"a*", "aaa") |
"+" | Önceki karakter bir veya daha fazla tekrar | re.search(r"a+", "aaa") |
"\[]" | Köşeli parantez içindeki karakterlerden herhangi biriyle eşleşir | re.search(r"\[a-z]", "Merhaba") |
"^" | Metin başlangıcına eşleşir | re.match(r"^Merhaba", "Merhaba dünya") |
"\$" | Metin sonuna eşleşir | re.search(r"dünya\$", "Merhaba dünya") |
Düzenli ifadeler, metin doğrulama, çıkarım ve işleme süreçlerini hızlandıran temel bir araçtır. Backend geliştirmede verimli ve güvenli kullanım, uygulamaların performansını ve sürdürülebilirliğini artırır. İleri adımlar, grup yakalama, backreference, lookahead/lookbehind ve kompleks değişiklik desenlerini öğrenmek olmalıdır. Regex’i sınıflar içinde kapsüllemek ve gerçek veriler üzerinde uygulamak, çözüm üretme kabiliyetini güçlendirir.
🧠 Bilginizi Test Edin
Bilginizi Test Edin
Bu konudaki anlayışınızı pratik sorularla test edin.
📝 Talimatlar
- Her soruyu dikkatle okuyun
- Her soru için en iyi cevabı seçin
- Quiz'i istediğiniz kadar tekrar alabilirsiniz
- İlerlemeniz üstte gösterilecek