Düzenlemeli ifadeler (Programlama)

Vikipedi, özgür ansiklopedi

(Regex sayfasından yönlendirildi)
Git ve: kullan, ara

Metin ayrıştırıcı (ingilizce 'parser') bilgisayarda dijital metinleri parçalara ayırmayı sağlar. Örneğin "Dün akşam eve gelirken yoldaki satıcıdan 3 kilo karpuz aldım" cümlesi bir yazılım vasıtası ile boşluklarından ayrıştırılarak "Dün", "akşam", "eve", "gelirken", "yoldaki", "satıcıdan", "3", "kilo", "karpuz", "aldım" halinde bir listeye koyulabilir.

Metinlerde geçen genel ifadeleri aramak veya ayrıştırmak için basit bir yöntem de düzenli ifadelerdir ("Regular Expressions" veya kısaca "Regexp"). Bu fonksiyonlar 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 cok programlama dili ve/veya programlama dilinde, bu işlem ayrıştırıcı jeneratör yardımı ile otomatik üretilen bir programla yapılabilir.

Konu başlıkları

[değiştir] Tarihçesi :

The origins of regular expressions lie in automata theory and formal language theory, both of which are part of theoretical computer science. These fields study models of computation (automata) and ways to describe and classify formal languages. In the 1950s, mathematician Stephen Cole Kleene described these models using his mathematical notation called regular sets. The SNOBOL language was an early implementation of pattern matching, but not identical to regular expressions. Ken Thompson built Kleene's notation into the editor QED as a means to match patterns in text files. He later added this capability to the Unix editor ed, which eventually led to the popular search tool grep's use of regular expressions ("grep" is a word derived from the command for regular expression searching in the ed editor: g/re/p where re stands for regular expression). Since that time, many variations of Thompson's original adaptation of regular expressions have been widely used in Unix and Unix-like utilities including expr, AWK, Emacs, vi, and lex.

Perl and Tcl regular expressions were derived from a regex library written by Henry Spencer, though Perl later expanded on Spencer's library to add many new features.[1] Philip Hazel developed PCRE (Perl Compatible Regular Expressions), which attempts to closely mimic Perl's regular expression functionality, and is used by many modern tools including PHP and Apache HTTP Server. Part of the effort in the design of Perl 6 is to improve Perl's regular expression integration, and to increase their scope and capabilities to allow the definition of parsing expression grammars.[2] The result is a mini-language called Perl 6 rules, which are used to define Perl 6 grammar as well as provide a tool to programmers in the language. These rules maintain existing features of Perl 5.x regular expressions, but also allow BNF-style definition of a recursive descent parser via sub-rules.

The use of regular expressions in structured information standards for document and database modeling started in the 1960s and expanded in the 1980s when industry standards like ISO SGML (precursored by ANSI "GCA 101-1983") consolidated. The kernel of the structure specification language standards are regular expressions. Simple use is evident in the DTD element group syntax.

See also Pattern matching: History.


[değiştir] Kullanım alanları :

kullanım alanı özellikle bilgisayar ve veri girişi olan her yerede kullanım alanı vardır. son dönemlerde özellikle (X) sitesindeki *.Html dosyasının içeriğini izinsiz (Y)Sitesine aktarmaya bu aktarma işlemi sırasında örneğin içeriğin başladığı bölümdeki html kodunun tanımlanması ve içerik içinde yer alan istenmeyen değişkenlerin ve reklamları ignore ederek (görmezlikten geçerek) siteden siteye izinli veya izinsiz içerik kronlama yöntemiyle. Regex işlemleri aşırı bir populeriteye ulaşmıştı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 direk 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 arttıranlardandı.

[değiştir] 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 herangi 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
Parentezler 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. Örneğin "colou?r", colour ve color`un 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 rasgele karmaşık ifadeler yaratmak için birleştirilebilir.

[değiştir] Dışsal Bağlantılar

Linux Focus`taki düzenli ifadeler çevirisi

tr:Düzenli ifadeler