Kurallı İfadeler

by

İngilizcesi regular expressions olarak biliniyor. Türkçede bazı kişiler düzenli ifadeler şeklinde kullanıyor. Ben kurallı ifadeler demeyi tercih ediyorum. Nokta, köşeli parantezler, yıldız gibi çeşitli karakterleri özel anlamları ile kullanarak içeriği kolayca seçebiliyoruz. Bazen çalıştırdığımız bir komut ile, bazen bir konfigürasyon dosyasında, bazen de bir program yazarken kullanabiliyoruz.

Kurallı ifadeler ile ilk olarak üniversitede okurken tanışmıştım. Fakat o zaman kullanım alanları kafamda canlanmamıştı. Sistem yöneticiliği yapmaya başladıktan sonra ne kadar faydalı olduklarını anladım. Yakın zamanda karşılaştığım bir örnek vereyim. HAProxy’nin arkasında WordPress kurulu bir web sitesi vardı. HAProxy ile /wp-admin ile biten adreslere erişimi sınırlamıştım. Fakat bir gün, erişimi engellediğim admin sayfasına bağlantı yapıldığını görünce şaşırdım. İncelediğimde bağlanan kişinin adresi yazarken //wp-admin şeklinde yazdığını gördüm. İkinci / karakteri anlamı değiştirmiyor ama benim filtremi aşmalarını sağlattırıyordu. Ben de filtreyi kurallı ifadeye çevirip şu şekilde yazdım:

^/+(wp-admin|wp-login)

Yani başlangıçta bir veya daha fazla sayıda / olabilir, devamında wp-admin veya wp-login gelebilir demek. Amacım kurallı ifadelerin nasıl kullanıldığını anlatmak değil. Bu konuda zaten çok fazla kaynak var.

Düşünüyorumda ben en çok log dosyalarını incelerken kurallı ifade kullanıyorum. grep, sed gibi komutlar benim için en büyük kullanım alanı. Zaman zaman vi içinde de işime yarıyor. Yazdığım scriptlerin içinde de kullanıyorum. Özellikle perl scriptlerinde imdadıma yetişiyor.

Çeşitli programların konfigürasyon dosyalarında yine kurallı ifadeleri tercih edebiliyorum. Yukarıda örnek verdiğim HAProxy bunlardan biri. Ayrıca, OpenLDAP, Postfix, Apache gibi programların konfigürasyonlarında da işime yarıyor.

Kurallı ifade yazarken bazı temel karakterler her yerde kullanılabiliyor ama ilave özellikler farklılık gösteriyor. Örneğin yukarıda kullandığım + karakterini grep komutu tanımaz. egrep ( veya grep -E) komutu ile kullanılabilir. Programlama dilleri arasında kurallı ifade kullanımında yine farklılıklar vardır. PCRE (perl compatible regular expressions) şeklinde kullanımı yaygındır.

Kurallı ifade yazmak biraz alışma gerektiriyor. Bence yazmaktan daha zor olanı başkasının yazdığını anlamak. Bazen aradan biraz zaman geçince kendi yazdıklarımı bile anlamakta zorlanıyorum.

Kurallı ifadeleri bulanlara teşekkür ediyorum. Onlar olmadan işlerimi yapmak daha zor olurdu.