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.

Düzenli İfadelerde Kullanılabilecek Özel Karakterler

Düzenli ifadelerde hangi karakterler kullanılır ¿


Düzenli ifadelerde kullanılan bir çok karakter bu karakterleri bir word belgesi halinde sunmak istedim.Bunları ezberlemek zor olabilir.Döküman halinde elinizin altında bulunursa problem yaşamazsınız.

Düzenli İfadelerde Kullanılan Karakterler İNDİR

Eşleştirme Deyimler ve İşaretleri

Eşleştirme ifadelerinden ilki “şapka işareti” diye tabir ettiğimiz “^” dir. Örnek olarak bir şiir metni aldım ve bu şiir metninde eşleştirme ifadelerini deneyeceğiz.

Cumhuriyet tarihin okuyup okutalım // 1. SATIR
O günlerde savaşan şehitleri analım // 2. SATIR
Atatürk ulu önder, gönülde yaşatalım // 3. SATIR
Hep rehberlik edecek Atatürk ilkleri // 4. SATIR

Bu şiir içinde arama yapacağız şimdi.İlk düzenli ifademiz ^Atatürk.
Şapkadan sonra gelen kelime ile başlayan satırı bul demektir.^Atatürk kelimesi ile arama yaptığında 3. satırı bulacaktır. 4. satırdada Atatürk kelimesi geçmektedir ama Atatürk kelimesi ile başlamadığı için bulmaz.

Cumhuriyet tarihin okuyup okutalım
O günlerde savaşan şehitleri analım
Atatürk ulu önder, gönülde yaşatalım
Hep rehberlik edecek Atatürk ilkleri

Şimdide $ işareti ile arama yapalım.$ işaretinden önce yazılan kelime ile biten satırları bul demektir.
analım$ ifadesini kullandığımızda bize ikinci satırı gösterecektir.

Cumhuriyet tarihin okuyup okutalım
O günlerde savaşan şehitleri analım
Atatürk ulu önder, gönülde yaşatalım
Hep rehberlik edecek Atatürk ilkleri

Şimdide hem şapka işareti hemde $ işareti ile bir düzenli ifade kullanıp arama yapmayı deneyelim.
Arama cümlemiz şöyle olsun. ^Atatürk$ Bu ifade hem Atatürk ile başlayan hemde Atatürk ile biten satırları bulmamızı sağlar.Bizim şiirimizde bu ifade biçiminde herhangi bir sonuç olmadığı herhangi bir sonuç geri dönmez.

Bu seferde düzenli ifade karakterlerini kullanmadan bir arama yapalım ne dersiniz.Atatürk kelimesini tek başına aratalım.Bu arama biçimi ise içinde Atatürk geçen satırları bulacaktır.Cümlenin başında veya sonunda olmasının herhangi bir önemi yoktur.

Cumhuriyet tarihin okuyup okutalım
O günlerde savaşan şehitleri analım
Atatürk
ulu önder, gönülde yaşatalım
Hep rehberlik edecek Atatürk ilkleri

Php’de Düzenli İfadeler

Düzenli ifadeler ile çalışmak.Düzenli ifade nedir ?

Düzenli ifadeler bir çok programcının fazla dokunmak istemediği bir konudur.Bunun sebebide değişik karakterlerin kullanılmasıdır.

^.+@\.. gibi harfler kullanarak yapulan düzenli ifadelerdir.Peki düzenli ifade ne demektir.Bu tür işaretleri kullanarak 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 o metni kullanırız ya değiştiririz yada sileriz.Bunun gibi işlemler düzenli ifadelerle mümkündür.Düzenli ifade demek bir diziliş sıralanış biçimidir.

Düzenli ifadelerle PHP‘de şu şekilde sıralanmış karakterleri bul diyebiliriz.Bir şiir içinde geçen “bulut” kelimesini aratabiliriz.,Düzenli ifadeler ile PHP ye verdiğimiz metni nerde ve kaç kez bulunmasını istediğimizide belirtir.Ayrıca bu düzenli ifadelerle PHP‘nin bulduğu metni veya metinleri ne yapması istediğini söyleyebiliriz.