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.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.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ı.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.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.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 greyi içeren kümeyi tanımlar.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. Örneğin "colou?r", colour ve colorun her ikisi ile de eşleşir.Asteriks, öncesindeki ifadenin 0, 1 veya herhangi bir sayıda olabileceğini gösterir. Örneğin "go*gle, ggle, gogle, google, gooogle...vb ile eşleşir.Artı işareti öncesindeki ifadenin en az bir kez geçtiğini gösterir. Örneğin "go+gle", gogle, google, gooogle, vb ile eşleşir (ama ggle 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.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.