Düzenli ifade

Düzenli ifadeler veya kurallı ifadeler, bilgisayar bilimlerinde ele alınan metindeki kimi katarların kısa yoldan ve esnek bir biçimde belirlenmesini sağlar. Bu katarlar belli karakterler, kelimeler veya karakter örüntüleri olabilir. Düzenli ifadeler, bir biçimsel dil kullanarak yazılır ve bir düzenli ifade işleyici tarafından yorumlanır. Bir düzenli ifade işleyicisi ya ayrıştırıcı olarak hizmet eden ya da metni inceleyip verilen tarife uygun kısımlarını belirleyen bir programdır.

Aşağıda bir düzenli ifade ile ifade edilebilecek tariflere birkaç örnek görülebilir:

herhangi bir yerde bulunan "ara" karakter dizisi; "ara", "araba", "paravan" gibi
diğer karakterlerden yalıtılmış şekilde bulunan "ara" kelimesi
kendisinden önce "kısa" veya "uzun" kelimesi geçen "ara" kelimesi
bir veya daha fazla rakamdan sonra gelen "TL" karakter dizisi

Düzenli ifadeler, hemen hemen tüm programlama dillerinde kütüphaneler olarak mevcuttur. Ancak bunlar her biçimsel dili ayırmak için yeterli değildir, bkz. Biçimsel dil kuramı. Pek çok programlama dili ve/veya programlama dilinde, bu işlem ayrıştırıcı yardımı ile otomatik üretilen bir programla yapılabilir.

Kullanım alanları
Düzenli ifadeler pek çok farklı metin işleme işlerinde ve daha genel olarak verinin sadece metin olmadığı katar işleme işlerinde kullanılmaktadır. Yaygın uygulamaları veri doğrulama, veri ayıklama (özellikle ağ ayıklama), veri dönüştürme, basit (metin) ayrıştırma, sözdizimi vurgulama sistemlerinin hazırlanması ve daha pek çok diğer görevlerdir.

Internet arama motorlarında düzenli ifade kullanımı faydalı olabilecek olsa da, bütün veritabanı üzerinde çalıştırılması, düzenli ifadenin karmaşıklığına ve tasarımına bağlı olarak çok fazla işlemci gücü gerektirebilmektedir. Sistem yöneticileri veritabanlarında düzenli ifadeler tabanlı sorgular çalıştırabilseler de, çoğu arama motoru düzenli ifade desteğini kullanıcılarına sağlamaz. Bu konuda önemli istisnalar Google Code Search, Exalead gibi özelleşmiş arama motorlarıdır.

Düzenli ifadeler (İngilizce kısaltması regexp, regex), hesaplama alanında belirli yazım kurallarına göre düzenlenmiş, bir dizge (yazı karakteri) setini tanımlayan veya onunla uyuşan dizgelerdir. Düzenli ifadeler birçok metin düzenleyici, arama araçları ve metin tabanlı belirli desenleri idare etme araçları tarafından kullanılır. Birçok programlama dili dizgeleri idare etmek için düzenli ifadeleri destekler. Örneğin Perl ve Tcl direkt kendi yazım kurallarına gömülü, güçlü düzenli ifadelere sahiptir. Unix dağıtımları tarafından sağlanan araçlar seti (düzenleyici sed ve filtreleyici grep de dahil olmak üzere) düzenli ifadeler kavramının tanınırlığını ilk artıranlardandı.

Temel kavramlar
Bir düzenli ifade, çoğunlukla desen olarak geçen, dizgeler seti tanımlayan bir ifadedir. Genellikle tüm elemanları listelemeden setin kısa bir tanımını vermek için kullanılırlar. Örneğin Handel, Händel ve Haendel dizgelerini içeren bir set "H(ä|ae?)ndel" deseni ile tanımlanabilir (ya da desen 3 dizgenin her biri ile eşleşir (matches) de denebilir). Çoğu biçimci yaklaşımda eğer özel bir set ile uyuşan herhangi bir düzenli ifade varsa buna benzer sonsuz sayıda ifade vardır. Çoğu biçimci yaklaşım düzenli ifadeleri oluşturmak için takip eden işlemleri sağlar.

Seçenekleme
Dikey bir çizgi seçenekleri ayırır. Örneğin "gr(a|e)y" olarak kısaltılabilecek olan "gray|grey" "gray" ya da "grey" ile eşleşir.

Gruplama
Parantezler işleçlerin (operatör) alan ve önceliklerini tanımlamak için kullanılır. Örneğin "gray|grey" ve "gr(a|e)y" değişik desenlerdir, ama her ikisi de gray ve grey i içeren kümeyi tanımlar.

Niceleme
Bir karakter ya da grubun ardından gelen niceleyici öncesindeki ifadenin kaç kez görülebileceğini belirtir. En temel niceleyiciler ?, * ve +'dır:

?
Soru işareti öncesindeki ifadenin 0 veya 1 kez geçtiğini gösterir. Örn: "colou?r", colour ve color un her ikisi ile de eşleşir.

Asteriks, öncesindeki ifadenin 0, 1 veya daha fazla bir sayıda olabileceğini gösterir. Örn: "go*gle, ggle, gogle, google, gooogle...vb ile eşleşir.

+
Artı işareti öncesindeki ifadenin en az 1 kez geçtiğini gösterir. Ör: "go+gle", gogle, google, gooogle ile eşleşir amaggle ile eşleşmez.

Bu yapılar, tıpkı sayılar ve +, -, *, / gibi işleçler ile cebirsel ifadeler oluşturulabileceği gibi rastgele karmaşık ifadeler yaratmak için birleştirilebilir.

Düzenli İfadeler Listesi
Örnekler
e([:digit:])? -- Sıfır veya bir sayıdan sonra gelen 'e' karakterini bulur. [:digit:] gibi tüm isimlendirilmiş karakter sınıflarının parantezler içine alınması gerektiğini unutmayın.

^([:digit:])$ -- Sadece tek basamaklı satırları ya da hücreleri bulur.

Arama terimlerini karmaşık arama işlemlerini gerçekleştirecek şekilde birleştirebilirsiniz.

Bir paragraf içindeki yalnız üç haneli sayıları bulmak için
^[:digit:]{3}$

^ aramanın paragraf başından başlayacağı anlamına gelir,

[:digit:] herhangi ondalık hane anlamına gelir,

{3} "rakam" hanelerinin tam olarak üç adet olacağını belirler,

$ eşleştirmenin paragraf sonunda bitmesi gerektiğini belirler.

Dış bağlantılar
Linux Focus'taki düzenli ifadeler çevirisi
Writer'daki düzenli ifadelerle ilgili wiki sayfası
Calc düzenli ifadeleri hakkında Wiki sayfası