Düzenli ifade

Vikipedi, özgür ansiklopedi
Şuraya atla: kullan, ara

Bilgisayarcılıkta düzenlemeli ifadeler, 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üzenlemeli ifadeler, bir biçimsel dil kullanarak yazılır ve bir düzenlemeli ifade işleyici tarafından yorumlanır. Bir düzenlemeli ifade işleyici, ya ayrıştırıcı üreteci olarak hizmet eden ya da metni inceleyip verilen tarife uygun kısımlarını belirleyen bir programdır.

Aşağıda bir düzenlemeli 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üzenlemeli 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ı jeneratör yardımı ile otomatik üretilen bir programla yapılabilir.

Kullanım alanları[değiştir | kaynağı değiştir]

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 klonlama 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ı.

Temel Kavramlar[değiştir | kaynağı değiştir]

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
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. Ö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 rastgele karmaşık ifadeler yaratmak için birleştirilebilir.

Karakter Sonuç/Kullanım
Herhangi bir karakter Herhangi bir karakter belirlenmeksizin bir karakteri temsil eder.
. Sayfa sonu veya paragraf sonu haricindeki herhangi bir karakteri temsil eder. Örneğin, "tak.im" arama terimi "takvim" ve "taksim" sonuçlarının ikisiyle de döner.
^ Eğer terim sadece paragraf başında ise aranılan terimi bulur. Boş alanlar veya karaktere tutturulmuş çerçeveler gibi paragraf başındaki özel nesneler dikkate alınmaz. Örnek: "^Selma".
$ Eğer terim sadece paragraf sonunda ise aranılan terimi bulur. boş alanlar veya karaktere tutturulmuş çerçeveler gibi paragraf başındaki özel nesneler dikkate alınmaz. Örnek: "Selma$".

$ kendi başına bir paragrafın sonu ile eşleşir. Bu şekilde paragraf sonlarını bulup değişltirmek mümkün hale gelir..

* "*" karakterinin önündeki 0 veya daha fazla karakteri bulur. Örneğin, "Ab*c" finds "Ac", "Abc", "Abbc", "Abbbc", ve buna benzer.
+ "+" karakterinin önündeki 1 veya daha fazla karakteri bulur. Örneğin , "AX.+4" arama terimi, "AXx4" veya "AXxyz4"metnini bulur, "AX4" metni bulunmaz.

Paragraftaki arama dizisine uygun en uzun metin daima bulunur. Eğer paragraf "AX 4 AX4" metnini içeriyorsa, bu pasaj vurgulanır. "AX 4" kısımı değil.

 ? "?" karakterinin önündeki 0 veya daha fazla karakteri bulur. Örneğin, "Metal?" arama terimi, "Metal" ve "Meta" sonuçlarını bulur. "x(ab|c)?y" ifadesi "xy", "xaby", or "xcy" metinlerini bulur.
\ Arama, "\" sonrasında girilen özel karakteri bir düzenli ifade olarak değil de bir normal karakter olarak işler (\n, \t, \> ve \< katışımları dışında). Örneğin, "ağaç\.", "ağaç." ifadesini bulurken "ağaçlar" ya da "ağaçla" ifadelerini bulmaz.
\n Shift+Enter tuş kombinasyonu ile eklenmiş satır kesmesini temsil eder. Satır kesmesini, paragraf kesmesi olarak değiştirmek için Aranan ve Yeni değer kutucuklarına \n'i girin ve ardından bir arama ve değiştirme gerçekleştirin.

İçin ara metin kutusu içindeki \n, Shift+Enter tuşları ile eklenmiş satır sonuna karşılık gelir.

İle yerdeğiştir metin kutusundaki \n, Enter veya Return tuşları ile girilebilen paragraf sonlarına karşılık gelir.

\t Bir tab (sekme) karakterini gösterir. Bu ifadeyi ayrıca Yeni değer kutusunda da kullanabilirsiniz.
\b Bir kelime sınırını eşleştir. Örneğin, "\bbook" ifadesi "bookmark" ifadesini bulur ancak "checkbook" ifadesini bulmaz. Oysa "book\" ifadesi "checkbook" ifadesini bulur ancak "bookmark" ifadesini bulmaz. Aranan kelime "book" her iki aramada da bulunur.
^$ Boş paragrafları arar.
^. Bir paragraf başındaki ilk karakteri bulur.
& veya $0 Aranankutusundaki arama ölçütüne göre bulunan metine, Değişiklik yaptığınız zaman, Yeni değer metin kutusunda belirlediğiniz metni ekler.

Örneğin, eğer Aranan kutusunda "pencere" metnini girer ve Yeni değer kutusuna "& çerçevesi" metnini girerseniz, "pencere" metni "pencere çerçevesi" metni ile değiştirilecektir.

Ayrıca, arama ölçütleriyle bulduğunuz metinlerin, Öznitelikleri'ni değiştirmek ya da bunları faklı bir Biçim ile kullanmak için de Yeni değer kutusuna bir "&" işareti girebilirsiniz.

[abc123] Köşeli ayraçlar arasındaki içindeki karakterleri bulur. Örneğin, s[eü]t ile, "set" ve "süt" sözcüklerini bulabilirsiniz.
[a-e] Başlangıç ve bitiş karakterlerini de içerecek şekilde, a ve e arasındaki karakterleri simgeler

Karakterler kod numaralarına göre sıralanır.

[a-eh-x] a-e ve h-x arasındaki karakterleri bulur.
[^a-s] a ile s karakter aralığı dışındaki tüm karakterleri bulur. Örneğin "a[^a-k]ın" "alın" ve "atın" sözcüğünü bulabilir, ancak "akın" sözcüğünü bulamaz.
\uXXXX

\UXXXXXXXX

Dört basamaklı onaltılık Unicode koda (XXXX) dayalı bir karakteri temsil eder.

Belirsiz karakterler için büyük U ve sekiz tane on altılık basamaklı (XXXXXXXX) ayrı bir çeşidi vardır.

Özel karakterler için belirli sembol yazı tipleri için kodlar kullanılan yazı tipine bağlı olabilir. Kodları, Ekle - Özel Karakter menü komutunu seçerek görüntüleyebilirsiniz.

| "|" öncesindeki ve "|" sonrasındaki terimleri bulur. Örneğin, "bu|şu", "bu" ve "şu" terimlerini bulur.
{2} Başlangıç ayracının önündeki karakterin kaç kez tekrarlanacağını tanımlar. Örneğin, "sa{2}t" "saat" sözcüğünü bulur, ancak "sat" sözcüğünü bulmaz.
{1,2} Başlangıç ayracının önündeki karakterin veya ifadenin en az n kez yinelendiği yerlerde. Örneğin, "10{3,}" "1000", "1000000" metinlerini bulur, ancak "100" bulunmaz.
{1,} Başlangıç ayracının önündeki karakterin veya ifadenin en az n kez yinelendiği yerlerde. Örneğin, "10{3,}" "1000", "1000000" metinlerini bulur, ancak "100" bulunmaz.
( ) Aranan kutusunda:

Ayraç içindeki karakterleri başvuru olarak tanımlar. Geçerli ifadede ilk başvuruya "\1" ile, ikinci başvuruya "\2" gibi biçimlerde başvuruda bulunabilirsiniz.

Örneğin, metniniz 13487889 sayısını içeriyorsa ve aramanız (8)7\1\1 düzenli ifadesini kullanıyorsa, "8788" sonucu bulunur.

Parantezleri () terimleri gruplamak için kullanabilirsiniz; örneğin "a(bc)?d" ifadesi "ad" veya "abcd" ifadelerini bulacaktır.

Yeni değer kutusunda:

Başvuruları değiştirmek için \ (ters bölü) yerine $ (dolar) kullanın. Bulunan karakter dizisinin tümünü değiştirmek için $0 kullanın.

[:alpha:] Alfabetik karakterleri bulur. [:alpha:]+ alfabetik karakterlerden oluşan metin dizilerini bulur.
[:digit:] Tek basamaklı bir sayı bulur. Birden fazla basamaklı bir sayı bulmak için [:digit:]+ parametresini kullanın.
[:alnum:] Alfanimerik karakterleri ([:alpha:] ve [:digit:]) temsil eder.
[:space:] Boşluk karakterini bulur (sekme karakterleri, veya bölünemez boşluk karakterleri bulunmaz).
[:print:] Yazdırılabilir karakterleri bulur.
[:cntrl:] Yazdırılamayan karakterleri bulur.
[:lower:] Seçenekler alanında BÜYÜK/küçük harf duyarlı seçeneği işaretlendiyse, küçük harf karakterleri bulur.
[:upper:] Seçenekler alanında büyük/küçük harf duyarlılığı seçeneği işaretlendiyse, büyük harf karakterleri bulur.

Örnekler[değiştir | kaynağı değiştir]

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[değiştir | kaynağı değiştir]

^[:digit:]{3}$

^ aramanın paragraf başından başlıyacağı 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.

Şablon:RelatedTopics

Kaynakça[değiştir | kaynağı değiştir]

Dış bağlantılar[değiştir | kaynağı değiştir]