WordPress, yazılım ve IT üzerine notlar
Anasayfa » Yazılım » Düzenli ifadeler (regex) korkulacak bir şey değil: Pratik örneklerle temel rehber

Düzenli ifadeler (regex) korkulacak bir şey değil: Pratik örneklerle temel rehber

İçindekiler
  1. Yapı taşları
  2. Gerçek hayattan örnekler
  3. Türkçe karakterlere dikkat
  4. Ne zaman regex kullanmamalı?

Düzenli ifadeler (regular expressions, kısaca regex), metin içinde desen aramanın bir dilidir. İlk karşılaşmada ^\d{3}-\d{2}$ gibi bir ifade anlaşılmaz görünür. Ama bu dili oluşturan parçaların sayısı azdır ve bir kez öğrenildiğinde editörde, terminalde ve kodda her gün işe yarar.

Yapı taşları

Karakterler ve sınıflar

abc        "abc" metninin kendisi
.          herhangi bir karakter (yeni satır hariç)
\d         bir rakam (0-9)
\w         harf, rakam ya da alt çizgi
\s         boşluk, sekme ya da yeni satır
[aeıioöuü] köşeli parantez içindeki karakterlerden biri
[^0-9]     rakam OLMAYAN bir karakter
[a-z]      a'dan z'ye bir harf

Büyük harfli sürümler tersini ifade eder: \D rakam olmayan, \S boşluk olmayan karakter.

Tekrar

a*      sıfır ya da daha fazla a
a+      bir ya da daha fazla a
a?      sıfır ya da bir a (isteğe bağlı)
a{3}    tam olarak üç a
a{2,5}  iki ile beş arası a

Konum

^       satırın başı
$       satırın sonu
\b      kelime sınırı

Gruplar ve seçenekler

(abc)       grup: eşleşen kısım ayrıca yakalanır
kedi|köpek  "kedi" ya da "köpek"

Özel anlamı olan bir karakteri kendisi olarak aramak için başına ters bölü koyun: \. gerçek bir nokta, \( gerçek bir parantez demektir.

Gerçek hayattan örnekler

1. Log dosyasından IP adreslerini ayıklamak

grep -oE '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b' access.log | sort | uniq -c | sort -rn | head

Bu komut, erişim günlüğünde en çok istek yapan on IP adresini listeler. ([0-9]{1,3}\.){3} kısmı "bir ila üç rakam ve bir nokta, üç kez" demektir. Sonuna dördüncü sayı eklenir.

Not: Bu desen 999.999.999.999 gibi geçersiz adresleri de yakalar. Log ayıklamak için yeterlidir, ama doğrulama için PHP'nin filter_var($ip, FILTER_VALIDATE_IP) fonksiyonu daha doğru bir araçtır.

2. Türkiye cep telefonu numarası doğrulamak

$tel = preg_replace('/\D+/', '', $girdi);          // rakam dışındakileri sil
$gecerli = preg_match('/^(90)?0?5\d{9}$/', $tel);

İlk satır 0 (532) 123 45 67 gibi biçimlendirilmiş girdileri 05321234567 hâline getirir. İkinci satır şunu kontrol eder: isteğe bağlı 90 ülke kodu, isteğe bağlı 0, ardından 5 ile başlayan on haneli numara. Önce temizleyip sonra doğrulamak, karmaşık tek bir desen yazmaktan çok daha okunaklıdır.

3. Tarih biçimini değiştirmek

2026-09-07 biçimindeki tarihleri 07.09.2026 biçimine çevirmek:

$yeni = preg_replace('/(\d{4})-(\d{2})-(\d{2})/', '$3.$2.$1', $metin);

Parantezler üç grup yakalar. Değiştirme kısmında $1, $2, $3 ile bu gruplara başvurulur ve sıraları değiştirilir. Aynı işlem VS Code'un "Bul ve Değiştir" penceresinde de çalışır; yalnızca .* simgesini açmanız gerekir.

4. Bir URL'den alan adını almak

preg_match('#^https?://([^/:]+)#i', $url, $m);
echo $m[1];   // "www.ornek.com"

Desende / çok geçtiği için sınırlayıcı olarak # kullandık. [^/:]+ ifadesi "eğik çizgi ya da iki nokta gelene kadar her şey" demektir. Yine de üretim kodunda PHP'nin parse_url() fonksiyonu daha sağlamdır.

5. Hata günlüğünde belirli saatleri süzmek

grep -E '^\[10-Sep-2026 0[2-4]:' php-error.log

Bu komut 10 Eylül'de saat 02:00 ile 04:59 arasında yazılmış satırları gösterir.

Türkçe karakterlere dikkat

PHP'de Türkçe metinlerle çalışırken desenin sonuna u bayrağını eklemeyi unutmayın:

preg_match('/^[a-zçğıöşü\s]+$/iu', $ad);

u bayrağı olmadan ş ve ğ gibi harfler iki ayrı bayt olarak görülür, . ya da {3} gibi ifadeler yanlış çalışır.

Ne zaman regex kullanmamalı?

  • HTML ya da XML ayrıştırmak için. İç içe etiketler regex'in doğal sınırlarını aşar. DOMDocument gibi bir ayrıştırıcı kullanın.
  • E-posta doğrulamak için devasa bir desen. filter_var($eposta, FILTER_VALIDATE_EMAIL) ve bir doğrulama e-postası daha güvenilirdir.
  • Okunamayacak kadar karmaşıklaştığında. Üç basit regex ve biraz kod, kimsenin anlamadığı tek bir dev desenden iyidir.

Son bir ipucu: regex101.com gibi çevrimiçi test araçları, deseninizin her parçasının ne yaptığını açıklar ve eşleşmeleri canlı gösterir. Öğrenmenin en hızlı yolu, kendi verinizle orada denemektir.

Tezcan Kabakçı
Hosting teknik destek uzmanı ve WordPress uzmanı. 2024'ten beri bir hosting şirketinde teknik destek bölümünde çalışıyor; WordPress, DNS ve e-posta sorunlarını her gün yakından görüyor. YouTube kanalı.
Bu yazı 7 Eylül 2026 tarihinde Yazılım kategorisinde yayınlandı.
Yeni yazılar e-postanıza gelsin

Ayda birkaç e-posta; istediğiniz an tek tıkla ayrılabilirsiniz.

Videolu anlatımlar YouTube'da
Sunucu ve WordPress sorunlarını kısa videolarla anlattığım kanala abone olabilirsiniz. ▶ Kanala abone ol

Yorumlar

Henüz yorum yok. İlk yorumu siz yazın.

Yorum yazın

Yorumlar onaylandıktan sonra yayımlanır. Bağlantı içeren yorumlar spam olarak değerlendirilebilir.