Prof. Dr. Sinsi
|
Php Düzenli İfadeler Hakkında Bilgi
PHP Düzenli İfadeler Hakkında Bilgi

Düzenli İfadeler
^ +@ +\ +$ işaretlerinin, Düzenli İfade işlemlerine ait olduğunu belirtilim Bu işaretler ve onların arasına koyduğumuz karakter örnekleri ile, PHP"nin aradığımız bir metnin karakterlerinin hangi diziliş, sıralanış konumunda olduğuna bakarak, bize o metni bulmasını sağlarız; ya bu metni kullanırız, sileriz veya değiştiririz Dolayısıyla, Düzenli İfade demek, bir diziliş, sıralanış biçimi demektir
Eşleştirme deyimleri ve işaretler
PHP"nin karakter ve sıralanış eşlemede kullanılan düzenli ifade komutlarını kısaca ele alalım; sonra bunları kullanmamıza imkan veren fonksiyonları görelim
^hakk => "hakk" ile başlayan bütün kelimeleri bulur
edilemez$ => Bu deyim ise PHP"ye "edilemez" ile biten bütün kelimeleri bulur
^hakkı$ => PHP, başında ^ işareti, sonunda $ işareti bulunan kararter sıralanışını, aynen arar; yani bu deyim, birinci örnekteki üç cümleyi de bulamaz
Hakk => Bu deyim ise her üç cümleyi de buldurur; çünkü üçünde de bu dört karakter bu sıralanışla mevcuttur
PHP"nin Düzenli İfadeleri, bütün rakam ve harfleri eşleştirebilir Fakat sorun, özel karakterlerde çıkar Sözgelimi, sekme işareti, satır sonlarında yeni-satır/satırbaşı işareti, gibi özel karakterleri, ancak önlerine Escape işareti olan ters bölü işaretini koyarak buluruz
Düzenli İfadelerde Özel Karakterler
[] Geri (Backspace) karakterini bulur
Belirtilen karakterle sınırlanan kelimeyi bulur: k, "hak mücadelesi" ifadesindeki birinci k"yı bulur; çünkü bu harf, bir kelime sınırlayıcıdır
B Belirtilen karakterle sınırlanmayan kelime yoksa, başlayanı bulur: kBi, "üç kişi" ifadesindeki "ki"yi bulur
cX X yerine yazacağımız kontrol karakterini bulur Örneğin, cA, Ctrl+A"yı, cZ ise Ctrl+Z"yi bulur
d 0"dan 9"ya kadar bir rakamı bulur: IEd, her ikisi de herhangi bir rakamla biten "IE5" ve "IE4" değerlerini ikisini de bulur,
D Herhangi bir ondalık işaretini bulur
f Form-feed (kağıt çıkart) karakterini bulur
Newline (yeni satır) karakterini bulur
Return (satırbaşı) karakterini bulur
s Boşluk (space) bulur
S Yatay ve düşey sekme, kağıt-çıkart, yeni satır, satırbaşı ve boşluk dışındaki herhangi bir karakteri bulur
Yatay sekme (Tab) karakterini bulur
v Düşey sekme karakterini bulur
w Herhangi bir harf, rakam veya alt-çizgiyi bulur
W Harf, rakam ve alt-çizgi dışındaki karakteri bulur
xHex Verilen 16 tabanlı (Hexadecimal) sayıya uygun Escape karakterini bulur Örneğin,
25, % işaretini bulur
Bu arada noktalama işaretlerini arattırırken, önlerine ters bölü işareti koymak gerekir Ters bömü işaretini de yine önüne ters bölü işareti koyarak (\) arttırabilirsiniz
Karakter Grupları
PHP"nin Düzenli İfadeleri"nde kolaylık sağlayan ve mesela ziyaretçinin bir Form"da bir INPUT etiketine verdiği yanıtıların içinde olmaması veya olmaması gereken karakterleri bulmamıza imkan veren karakter grupları oluşturma yöntemini de kullanabiliriz Sözgelimi bütün sesli hafleri aratmak için şöyle bir karakter grubu oluşturabiliriz:
[OoUuÖöAaOoEeıIiİ]
Karakter gruplarını köşeli parantez içinde yazarız Bu deyimle, PHP, içinde herhangi bir sesli harf bulunan bütün değerleri eşleştirecektir Bu yöntemden yararlanarak, şu grupları kullanabiliriz:
[a-z] Herhangi bir küçük harfi bulur
[A-Z] Herhangi bir büyük harfi bulur
[a-zA-Z] Herhangi bir büyük veya büyük harfi bulur
[0-9] Herhangi bir rakamı bulur
[0-9 -] Herhangi bir rakamı, noktayı veya kesme çizgisini bulur
[ f
] Herhangi bir Form-feed (kağıt çıkart), Newline (yeni satır), Return (satırbaşı) karakterini veya boşluğu (space) bulur
Sözgelimi, bir alfanümerik değer kümesinde b3, u2, n9 gibi birincisi küçük harf, ikincisi rakam olan iki karakterlik dizileri bulmak istiyorsak, arama grubunu şöyle kurarız:
^[a-z][0-9]$ => Bu deyim PHP"ye, a"da z"ye küçük harfle başlayan, (^işareti aranan unsurun değerin başında olması gerektiğini söylüyor) ve sonunda 0"dan 9"a bir rakam bulunan kelimeleri bulmasını söyleyecektir PHP, bu kelimenin sadece iki harfli olmasına dikkat edecektir; çünkü grubumuzun bir başı ve bir de sonu belirlendiğine göre, üç karakterli değerlerin bulunması imkanı yoktur
^ işareti köşeli parantez içinde grup deyimi oluştururken kullanılırsa, bu olumsuzluk anlamı taşır Sözgelimi, 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 söz gelimi 13"ü bulmayacak, fakat u2"yi bulacaktır Bu yöntemle şu grupları 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 kullandığımız özel karakterler de vardır Örneğin nokta işareti ( ), yeni satır başlangıcı olmayan herhangi bir karakter anlamına gelir Dolayısıyla,
^ 0$ => deyimi yeni satırla başlamayan ve sıfır ile biten herhangi iki karakterli değeri bulacaktır
Karakter eşleştirmede tekrar sayısı da bir özellik olarak kullanılabilir Tekrar sayısı belirtmek için süslü parantez ({}) kullanırız
Örnekler:
^a{4}$ İçinde sadece dört adet küçük a harfi bulunan kelimeleri seç: aaaa
^a{2,4}$ İçinde sadece iki üç veya dört adet küçük a harfi bulunan kelimeleri seç: aa, aaa, aaaa gibi
^a{2, } İki veya daha fazla küçük a harfi bulunan kelimeleri seç: haar, haaar, haaaar gibi Bu deyim "har" kelimesini seçmez
{2} Ardarda iki sekme işaretini bul
{2} Herhangi çift karakteri bul: aa, &&, == 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, }$
Bu karmaşık deyim aslında sadece "Negatif veya pozitif bir ondalık (double) değeri bul," anlamına geliyor Kısaca irdelersek, aranan degerin sıfır veya bir kere tekrarlanan bir kesme çizgisiyle başlayabileceğini ("Sıfır veya bir kere" demek, olsa da olur, olmasa da anlamına geliyor!) bunu sıfır veya daha fazla kere tekrarlanan bir rakamın izleyebileceğini, onu da sıfır veya bir kere tekrarlanan bir nokta işareti ile sonunda sıfır veya daha fazla kere tekrarlanan herhangi bir rakamın izleyebileceğini söylemiş oluyoruz
|