mIRC Script

mIRC Regex: Düzenli İfadelerle Güçlü Metin Eşleştirme

· Güncelleme: · 5 dk okuma

mIRC Regex: Düzenli İfadelerle Güçlü Metin Eşleştirme
İçindekiler
  1. Regex Identifier'ları
  2. Temel Regex Söz Dizimi
  3. Yakalama Grupları
  4. Adlandırılmış Eşleştirmeler
  5. Değiştirme: $regsub
  6. Pratik Kullanım Örnekleri
  7. Regex ile Joker Karakter Arasında Seçim
  8. Kaçış Karakterleri
  9. Kullanıcı Girdisini Regex'te Kullanmak
  10. Regex Öğrenmek
  11. Regex İfadelerini Okunabilir Tutmak
  12. Sonuç

mIRC'in joker karakterli eşleştirmesi basit işler için yeterlidir, ama bazı durumlarda yetersiz kalır: Bir metinde geçerli bir e-posta adresi olup olmadığını kontrol etmek, bir mesajdan bütün bağlantıları çıkarmak, bir tarihi parçalarına ayırmak, belirli bir kalıpta yazılmış kodları yakalamak. mIRC regex desteği, bu tür işler için düzenli ifadeleri kullanmanızı sağlar.

Regex Identifier'ları

IdentifierNe yapar?
$regexEşleşme olup olmadığını kontrol eder, eşleşme sayısını verir
$regmlYakalanan grupları döndürür
$regsubEşleşmeleri değiştirir
$regsubexDeğiştirirken her eşleşme için işlem yapar
$regerrRegex hatası varsa bildirir

Temel kullanım:

//echo -a $regex(merhaba dunya,/dunya/)

Bu komut eşleşme sayısını verir; eşleşme yoksa sıfır döner. Bir koşulda doğrudan kullanılabilir:

if ($regex($1-,/^!komut\s+(\S+)/i)) {
  echo -a Parametre: $regml(1)
}

Temel Regex Söz Dizimi

KalıpNeyle eşleşir?
.Herhangi bir karakter
\dBir rakam
\wHarf, rakam veya alt çizgi
\sBoşluk karakteri
\SBoşluk olmayan karakter
*Önceki öğeden sıfır veya daha fazla
+Önceki öğeden bir veya daha fazla
?Önceki öğeden sıfır veya bir
{2,5}Önceki öğeden 2 ile 5 arası
^Metnin başı
$Metnin sonu
[abc]Köşeli parantez içindeki karakterlerden biri
[^abc]Bunlardan biri olmayan
(...)Yakalama grubu
`\`Veya

İfadenin sonuna eklenen harfler davranışı değiştirir: i büyük-küçük harf duyarsız eşleştirme, g bütün eşleşmeleri bulma anlamına gelir.

Yakalama Grupları

Regex'in en güçlü yanı, eşleşmenin parçalarını yakalayabilmesidir. Parantez içine aldığınız bölümler ayrı ayrı erişilebilir hâle gelir:

if ($regex($1-,/^(\d{2})\.(\d{2})\.(\d{4})$/)) {
  echo -a Gun: $regml(1) Ay: $regml(2) Yil: $regml(3)
}

Bu kod, "15.06.2026" biçiminde bir tarihi parçalarına ayırır. $regml(1) ilk grubu, $regml(2) ikincisini verir. $regml(0) yakalanan grup sayısını döndürür.

Bu teknik, kullanıcı komutlarını ayrıştırmak için çok kullanışlıdır: Tek bir regex ile komut adını, parametreleri ve seçenekleri aynı anda yakalayabilirsiniz.

Adlandırılmış Eşleştirmeler

Birden fazla regex işlemi yaptığınızda yakalanan grupların karışmaması için eşleştirmeye bir ad verebilirsiniz:

if ($regex(tarih,$1-,/(\d{2})\.(\d{2})/)) {
  echo -a $regml(tarih,1) ve $regml(tarih,2)
}

Ad vermek, özellikle iç içe veya sıralı regex işlemlerinde karışıklığı önler.

Değiştirme: $regsub

var %sonuc
noop $regsub($1-,/\s+/,$chr(32),%sonuc)
echo -a %sonuc

Bu kod, metindeki ardışık boşlukları tek boşluğa indirir. $regsub sonucu dördüncü parametrede belirtilen değişkene yazar ve kendisi eşleşme sayısını döndürür; bu yüzden noop ile çağrılır.

Değiştirme metninde yakalanan gruplara referans verebilirsiniz; bu, metni yeniden biçimlendirmek için çok kullanışlıdır. Örneğin bir tarihi gün-ay-yıl biçiminden yıl-ay-gün biçimine çevirmek tek satırda yapılabilir.

$regsubex ise her eşleşme için bir işlem yapmanızı sağlar; bu, dinamik değiştirmeler için güçlü ama karmaşık bir araçtır.

Pratik Kullanım Örnekleri

Bağlantı tespiti: Bir mesajda web adresi olup olmadığını kontrol etmek, kanal koruma scriptlerinin sık ihtiyacıdır. Regex, basit joker karakter kontrolünden çok daha güvenilir sonuç verir çünkü adresin yapısını tanımlayabilirsiniz.

Komut ayrıştırma: Bir komutun adını, seçeneklerini ve parametrelerini tek regex ile ayırmak, token identifier'larıyla yapılan çok adımlı işlemden daha kısa olabilir.

Biçim doğrulama: Kullanıcının girdiği değerin beklenen biçimde olup olmadığını kontrol etmek: saat, tarih, sayı aralığı, nick biçimi.

Veri çıkarma: Socket ile çekilen bir web sayfasından belirli bilgileri çıkarmak. Socket kullanımı için mIRC sockets yazımıza bakın.

Temizleme: Metinden istenmeyen karakterleri kaldırmak veya normalleştirmek.

Regex ile Joker Karakter Arasında Seçim

Regex güçlüdür ama her zaman doğru araç değildir. Basit bir "bu metin şununla başlıyor mu" kontrolü için joker karakterli eşleştirme hem daha okunabilir hem daha hızlıdır. Regex'i şu durumlarda tercih edin: Kalıp karmaşıksa, parça yakalamanız gerekiyorsa, değiştirme yapacaksanız veya biçim doğrulaması yapıyorsanız.

Performans açısından regex, basit eşleştirmelerden daha maliyetlidir. Her kanal mesajında çalışan bir kodda karmaşık bir regex kullanmak, kalabalık kanallarda fark edilir yavaşlamaya yol açabilir. Böyle durumlarda önce hızlı bir ön kontrol yapıp (örneğin mesajda belirli bir karakterin varlığını kontrol etmek) ancak gerekliyse regex çalıştırmak iyi bir optimizasyondur. Performans için mIRC script performansı yazımıza bakın.

Kaçış Karakterleri

Regex'te özel anlamı olan karakterleri (nokta, parantez, köşeli parantez, artı, yıldız, soru işareti) harfi harfine aramak istiyorsanız önlerine ters eğik çizgi koymanız gerekir. Bu, en sık yapılan regex hatalarından biridir: Nokta karakteri regex'te "herhangi bir karakter" anlamına gelir, bu yüzden bir alan adını eşleştirmek isterken noktayı kaçırmamak gerekir.

mIRC'in kendi söz dizimiyle çakışan karakterler de dikkat gerektirir: Dolar işareti, yüzde işareti ve dikey çizgi gibi karakterler mIRC tarafından yorumlanabilir. Regex ifadenizi bir değişkende tutup kullanmak bazı durumlarda bu sorunu çözer.

Kullanıcı Girdisini Regex'te Kullanmak

Kullanıcının yazdığı bir metni regex kalıbının içine koymak tehlikelidir: Kullanıcı regex'te özel anlamı olan karakterler yazarak kalıbı bozabilir veya çok maliyetli bir eşleştirme oluşturarak mIRC'i yavaşlatabilir. Kullanıcı girdisini kalıp olarak kullanmanız gerekiyorsa özel karakterleri kaçırmanız veya girdiyi sınırlamanız gerekir.

Regex Öğrenmek

Regex öğrenmenin en iyi yolu denemektir. mIRC'in komut satırında küçük testler yapabilirsiniz: Bir kalıp yazın, bir metinle deneyin, sonucu görün. Yakalanan grupları yazdırarak kalıbın tam olarak neyi aldığını anlayabilirsiniz.

İnternette regex ifadelerini test etmenizi sağlayan araçlar da mevcuttur; bunlar kalıbın hangi bölümünün neyi eşleştirdiğini görsel olarak gösterir. Öğrenirken basit kalıplarla başlamak ve kademeli olarak karmaşıklaştırmak, karmaşık bir kalıbı bir seferde yazmaya çalışmaktan çok daha verimlidir.

Regex İfadelerini Okunabilir Tutmak

Uzun bir regex ifadesi, yazıldıktan birkaç hafta sonra kendi yazarı için bile anlaşılmaz hâle gelebilir. Bu yüzden karmaşık bir kalıp yazdığınızda hemen üstüne ne eşleştirdiğini anlatan bir yorum satırı eklemek neredeyse zorunludur. Yorumda kalıbın hangi parçasının neyi yakaladığını belirtmek, aylar sonra kodu değiştirmeniz gerektiğinde sizi kalıbı baştan çözmekten kurtarır.

Çok karmaşık kalıpları tek bir ifadeye sığdırmaya çalışmak yerine birkaç adıma bölmek de iyi bir yaklaşımdır. Önce kaba bir eşleştirme yapıp sonucu kontrol etmek, sonra ikinci bir kalıpla ayrıntıyı çıkarmak, hem daha okunabilir hem de hata ayıklaması daha kolay bir kod üretir.

Sonuç

Regex, metin işlemenin en güçlü aracıdır. Temel söz dizimini öğrenin, yakalama gruplarıyla parça çıkarın, $regsub ile değiştirme yapın, özel karakterleri kaçırmayı unutmayın ve her mesajda çalışan kodlarda performansı göz önünde bulundurun. IRC protokolünün ham mesajlarına erişmek için sıradaki rehberimiz mIRC raw eventleri.

IRC sorunun mu var? Kanalda birlikte çözelim.

💬 Kanala Bağlan

Sıkça Sorulan Sorular

Regex nedir?

Metin kalıplarını tanımlamak için kullanılan özel bir söz dizimidir. Karmaşık eşleştirmeleri tek satırda yapmanızı sağlar.

Regex ile joker karakter arasındaki fark nedir?

Joker karakterler basit eşleştirmeler yapar. Regex çok daha ayrıntılı kalıplar tanımlamanıza, parça yakalamanıza ve değiştirme yapmanıza izin verir.

Regex öğrenmek zor mu?

Temel kalıpları birkaç saatte öğrenebilirsiniz. İleri kullanım pratik gerektirir ama temel bilgi bile çok işe yarar.