Navigate / search

Düzenli İfadeler Karakter Gruplamarı

Karakter Gruplamaları

PHP’de düzenli ifadelerde kolaylık sağlayan ve mesela ziyaretçinin girdiği bir bilgi içinde olmaması gereken karakterleri bulmamıza imkan veren karakter gruplamalarını kullanabiliriz. Örneğin bütün Türkçe karakterleri aratmak için aşağıdaki gruplama kullanılabilir:

 [ĞÜŞİÖÇŞğüşıöç]

Karakter gruplamaları köşeli parantezler ile yapılır. Bu gruplama ile içinde herhangi bir Türkçe karakter bulunan bütün değerleri eşleştirecektir. Bu yöntemle, şu gruplamalar yapılabilir:

Sözgelimi, bir metin içinde a4, a5, a6 gibi birincisi küçük harf, ikincisi rakam olan iki karakterlik dizileri bulmak istiyorsak, arama grubu şöyle olacaktır:

 ^[a-z][0-9]$

Bu deyim PHP’ye, a’da z’ye küçük harfle başlayan ve sonunda 0-9 arasındaki herhangi bir rakam bulunan kelimeleri buldurur. PHP, bu kelimenin sadece iki harfli olmasına dikkat edecektir.

^ işareti, köşeli parantez içinde yani gruplamada kullanılırsa, bu olumsuzluk anlamı taşır. Örneğin, iki rakamlı ancak birinci karakteri rakam olmayan fakat ikinci karakteri rakam olan değerlerin bulunması için şu deyim gerekir:

 ^[^0-9][0-9]$

Burada en baştaki ^işareti “başında” demektir; ancak hemen arkasından gelen grupta “rakam olmayan” demiş oluyoruz; ikinci grup ve sonundaki $ işareti ile “rakamla biten” anlamına geliyor. Deyimde sadece baş ve sonu gösteren iki eşleştirme unsuru bulunduğuna göre bu deyim, “başında rakam olmayan, sonunda rakam olan iki karakterli değerleri” bulmaya yarayacaktır. Bu deyim yukarıdaki a4,a5,a6 kelimelerinin hepsini bulacaktır. Yani yukarıdaki grup bu şekilde de yazılabilir. Tek fark var bu yazılan A5, A6’yı da bulacaktır çünkü harf büyüklüğü belirtilmemiş, rakam olmayacak denmiş. Bu yöntemle şu gruplamaları yapabiliriz:

 [^a-z]   Küçük harf olmayan herhangi bir harfi bulur.
 [^A-Z]   Büyük harf olmayan herhangi bir harfi bulur.
 [^\\\/\^]   \ , / veya ^ dışında herhangi bir karakteri bulur.
 [^\"\']   Çift ve tek tırnak dışında herhangi bir karakteri bulur.

Grup oluşturmada da bazı özel karakterler vardır. Örneğin nokta işareti ( . ), yeni satır başlangıcı olmayan (yani newline olmayan) herhangi bir karakter anlamına gelir. Dolayısıyla,

 ^.5$

deyimi yeni satırla başlamayan ve 5 ile biten herhangi iki karakterli metni bulacaktır.
PHP’nin kullanıma hazır(built-in) özel eşleştirme gruplamaları da vardır:

 [[:alpha:]]  Herhangi bir harf
 [[:digit:]]   Herhangi bir rakam
 [[:alnum:]]   Herhangi bir harf veya rakam
 [[:space:]]   Herhangi bir boşluk karakterini
 [[:upper:]]   Herhangi bir büyük harf
 [[:lower:]]  Herhangi bir küçük harf
 [[:punc:]]  Herhangi bir noktalama işareti
 [[:xdigit:]]  Herhangi bir Hexadecimal karakter.  [0-9a-fA-F]

Karakter eşleştirmede tekrar sayısı da bir özellik olarak kullanılabilir. Tekrar sayısı belirtmek için süslü parantez { } kullanılır.

 ^b{4}$   İçinde dört adet küçük b harfi bulunan kelimeleri seç: bbbb.
 ^b{2,4}$   İçinde iki üç veya dört adet küçük b harfi bulunan kelimeleri seç: bb, bbb,
bbbb gibi
 ^b{2,}   İki veya daha fazla küçük b harfi bulunan kelimeleri seç: abb, abbb, abbbb
gibi. Bu deyim "ab" kelimesini seçmez.
 \t{2}   Ardarda iki sekme işaretini bul
 .{2}  Herhangi çift karakteri bul: bb, $$, ğğ gibi
 ^\-{0,1}[0-9]{1,}$   Negatif veya pozitif herhangi bir tam sayıyı bul
 ^[0-9]{1,}$  Pozitif herhangi bir tam sayıyı bul

Bu tür deyim oluşturma işlemleri giderek karmaşıklaşabilir. Örneğin:

 ^\-{0,1}[0-9]{0, }\.{0,1}[0-9]{0, }$

PHP bu tür karmaşık ifadelerin hatasız yazılmasını sağlayan kısaltmalara sahiptir. Bunlar:

? {0,1} anlamına gelir. Kendisinden önce yer alan karakterin en az sıfır en çok bir kere tekrar edilmesi gerektiğini (olmayabileceğini ama olursa en fazla bir kere olabileceğini) belirtir.

* {0, } anlamına gelir. Kendisinden önce yer alan karakterin sıfır veya daha fazla kere tekrar edilmesi gerektiğini (tümüyle opsiyonel olduğunu) belirtir.

+ {1, } anlamına gelir. Kendisinden önce yer alan karakterin en az bir veya daha çok kere tekrar edilmesi gerektiğini (bulunmasının zorunlu olduğunu) belirtir.
Bu kısa-yolları kullanarak, yukarıdaki karmaşık ifadeleri basitleştirelim:

 ^\-?[0-9]*\.?[0-9]*$ 
 ^[a-zA-Z0-9_]+$ 
En az bir harf veya rakam veya altçizgi içeren herhangi bir kelime
 ^[0-9]+$   Herhangi bir pozitif tamsayı
 ^\-?[0-9]+$   Herhangi bir tamsayı
 ^\-?[0-9]*\.[0-9*$]+$   Herhangi bir kesirli (double) sayı

Bir düzenli ifadede bir veya bir başka kelime aranacaksa, birden fazla arama işaretini kullanabiliriz. Birden fazla kriter vermemize izin veren işaret, | işaretidir.

 \ali  |  \aliye

ifadesi ile, ya “ali” ya da “aliye” değerlerinin bulunmasını sağlayabiliriz.

PHP programlarımızda ziyaretçilerimizin girdiği bilgileri çeşitli bakımlardan test etmek mümkündür; ancak hiç bir zaman yazılanların doğruluğunu garanti edemeyiz. Özellikle bir metinde bulunmaması gereken işaretleri PHP’ye Düzenli İfade Fonksiyonları ile aratabiliriz.

Php Escape Karakterler

Phpde $degiskenadi gibi bir ifade kullandığımızda o değişkenin mutlaka içeriğini yazar.Echo komutuyla ekrana $degiskenadi yazdırmak istersek;

1
echo "$degiskenadi";

Sonuç olarak ekrana;

 

çıkacaktır.Çünkü Php yorumlayıcımız bizim ekrana değişkenin değerini yazdırmak istediğimizi anlamıştır.Halbuki biz ekrana “$degiskenadi” yazdıracaktık.Php yorumlayısının $ karakterini gördüğü anda onun özel bir karakter yani değişkeni işaret ettiğini anlamıştır.Biz bunu yorumlayıcıya düz yazı gibi anlatmak istersek escape karakterleri kullanmamız gerekecek.

1
echo "\$degiskenadi";

Sonuç olarak ekrana;

$degiskenadi

çıkacaktır.Özel karakterlernden önce ters bölü “\” koymamız bu sorunu çözecektir.echo komutuyla yazdırma işlemi yaparken aşağıdaki özel karakterleri ters bölü ile kullanmamız gerekecek.
Kullanabileceğimiz Escape Karakterleri:

\'	Tek tırnak
\"	Çift tırnak
\\	Ters-bölü
\$	Dolar işareti
\n	Yeni Satır (New Line)
\r	Satır Başı (Return)
\t	Sekme (Tab) karakteri