Regex Büyük/Küçük Harf Duyarsızlığını Anlamak

Düzenli ifadeler (regex), desen eşleme ve metin manipülasyonu için güçlü araçlardır. Regex ile çalışırken yaygın bir gereksinim, belirli karakterlerin durumunu yok saymak ve diğerlerinin durumuna duyarlı olmaktır. Bu blog yazısında, regex’te seçici büyük/küçük harf duyarsızlığını nasıl elde edeceğimizi keşfedeceğiz, böylece desen eşlemeniz daha esnek hale gelecek.

Problem

Diyelim ki stringiniz çeşitli durumlar içeriyor, örneğin:

fooFOOfOoFoOBARBARbarbarbAr

“foo” kelimesini durumundan bağımsız olarak eşleştirmek istiyorsunuz, ancak sadece büyük harfli “BAR"ları eşleştirmek istiyorsunuz. Zorluk, regex deseninizin yalnızca bir kısmını büyük/küçük harf duyarsız hale getirirken, diğer kısımları duyarlı tutmanın bir yolunu bulmaktır.

Yaygın Regex Büyük/Küçük Harf Duyarsızlığı Yaklaşımları

Genellikle, regex desenleri uygulama genelinde veya desen seviyesinde değiştiriciler ile tamamen büyük/küçük harf duyarsız hale getirilir. Ancak, ilk sorumuzda ortaya konduğu gibi, bu her zaman istenilir değildir.

Çözüm: Satır İçi Mod Değişiklikleri

Desen Değiştiricilerini Kullanma

Perl gibi dillerde, deseninizin yalnızca bir bölümünde büyük/küçük harf duyarsızlığını belirtmek için (?i:) değiştiricisini kullanabilirsiniz. İşte nasıl çalıştığı:

  1. Satır İçi Değiştiriciler: Büyük/küçük harf duyarsız yapmak istediğiniz regex segmentinin önüne (?i:) ekleyin.
  2. Değiştiricileri Kapatma: Duyarlılığa geri dönmek için (?-i) değiştiricisini kullanabilirsiniz.

Örnek

Verilen string için regex’i şu şekilde inşa edebiliriz:

(?i)foo*(?-i)|BAR

Bu ifadede:

  • (?i) “foo” kısmını büyük/küçük harf duyarsız hale getiriyor.
  • (?-i) ardından gelen kısmı, bir başka regex deseninin başlangıcını belirten boru (|) ayırıcıya kadar büyük/küçük harf duyar hale getiriyor.

Diller Arası Regex Desteği

  • Satır İçi Değiştiricileri Destekleyenler:

    • Perl
    • PHP
    • .NET
  • Satır İçi Değiştirme Desteği Olmayanlar:

    • JavaScript
    • Python

JavaScript ve Python’da, tüm değiştiriciler tüm ifadeye uygulanır, yani bunları etkinleştirdikten sonra modları kapatma desteği yoktur.

Regex’inizi Test Etme

Regex’inizin mod değiştiricilerini nasıl ele aldığını basit bir örnekle test edebilirsiniz:

(?i)te(?-i)st

Bu, aşağıdaki ile eşleşecektir:

  • test
  • TEst

Ama şu ile eşleşmeyecek:

  • teST
  • TEST

Sonuç

Regex’te satır içi mod değişikliklerini kullanmak, desen eşlemenizi, büyük/küçük harf duyarlılığı konusunda esneklik sağlayarak geliştirebilir. Perl ve PHP gibi bazı diller, bu tür ince değişikliklere izin verirken, JavaScript ve Python gibi diğerleri daha küresel bir yaklaşımı zorunlu kılar.

Regex değiştiricileri hakkında daha fazla bilgi için, Düzenli İfadeler Bilgisi gibi ek kaynaklara göz atmayı düşünebilirsiniz.

Doğru yaklaşımla, hem güçlü hem de hassas regex desenleri oluşturarak gerektiğinde durum duyarlılığını yönetebilirsiniz.