Paternler
Bir patern'i ne olusturur? Veya onlari verilen bir grup ifade
ile nasil karsilastirabiliriz?En basit patern bir "kelime"dir.Biz
verilen bir kelime grubunun icinde istedigimiz bir kelimenin
olup olmadigina bakalim...
Bunu yapmak icin simdiye kadar ogrendigimiz bir teknigi uygulayabiliriz.explode
() komutu ile bunu asagidaki sekilde yapabiliriz,
<?php
//explode () kullanimina ornek
$kelimeler = "bir,iki,uc,dort,bes,alti";
$kelimedizisi = explode (" ",$kelimeler);
foreach ($kelimedizisi as $kelime) {
if ($kelime == "alti") echo "Aradiginiz 'alti' kelimesi bulundu
!!! ";
}
?>
Bu kodlar calisir,belki isinizde gorulur ama biraz karmasik
oyle degilmi?Yukarida aciklanan kod icerisinde explode ()
komutu kullanilmistir.Bu komut verilen bir string ifadeyi
diziye cevirmek icin kullanilir.
Tum bu islemleri yapmanin cok kolay bir yolu bulunmaktadir.Evet
"Regular Expressions" kullanilarak ayni islemin nasil yapildigina
bakalim,
<?php
//ereg_bul.php
$kelimeler = "bir,iki,uc,dort,bes,alti";
if (ereg("bir", $kelimeler)) echo "Aradiginiz 'bir' kelimesi
bulundu !!!";
?>
ayni islemi bir satir kod ile tamamlamis olduk.Hemde cok daha
agrisiz sizisiz bir sekilde :) yukaridaki kod parcasinda PHP'nin
ereg () fonksiyonu kullanilmistir.Fonksiyonu kullanirken
ilk olarak aramak istedigimiz string ifadeyi tanimladik.Ardindan
bu ifadeyi neyin icinde arayacagimizi belirledik.Bu fonksiyon
eger islem basarili olursa true(Dogru), islem basarisiz
olursa false(Yanlis) degerini dondurur.
Yukaridaki ornekte aranan kelime "bir",aranacak yer olarak
da $kelimeler degiskeni tanimlanmistir.Sonucta fonksiyonumuz
true yani dogru degerini dondurmustur.(Aranan kelime,verilen
degisken degeri icinde bulunmustur.)
ereg () fonksiyonu icin ucuncu bir argument'te tanimlanabilir.Bu
argument basarili olarak "bulunan" ifadelerin icerisinde saklanabilcegi
bir dizinin ismini tanimlamaktir.
Yukaridaki ornegi biraz gelistirelim ve size bu ucuncu argumentin
nasil tanimlanacagini gosterelim,
<?php
//ereg_bul2.php
$kelimeler = "bir,iki,uc,dort,bes,alti";
if (ereg("bir",$kelimeler,$kayit)) echo "Aradiginiz '$kayit[0]'
kelimesi bulundu !!! ";
?>
Bu sekilde kullanimlarda dikkat etmeniz gereken bir kac nokta
vardir.Birincisi bulunmasini istediginiz kelimeler tam olarak
(bosluklar,buyuk/kucuk har ayrimi noktalama isaretleri vb)herseyi
ile uyusmalidir.Bir ornek verelim,
<?php
//ereg_bul3.php
$kelimeler "Turkiyenin kurucusu,onderimiz MUSTAFA KEMAL ATATURK"
if (ereg("Kurucusu onderimiz",$kelimeler,$kayit)) echo "Aradiginiz
'$kayit[0]' kelimesi bulundu !!!";
?>
Bu verilen ifade $kelimeler degiskeninin sakladigi deger icinde
bulunamaz cunku arada bir virgul isareti ve buyuk harfle
yazilan "K" harfi basarili bir bulma isleminin olmasini engelliyor...
Ornegimizi biraz daha gelitirelim ve PHP'nin yazdigimiz komutlari
nasil inceledigine ve uyguladigina bakalim.
<?php
//ereg_bul4.php
$kelimeler1 = "Neden deniz kirliligine yol aciyoruz.Yoksa
biz gocebemiyiz !!!";
$kelimeler2 = "Amcamin oglu denizalti kaptanidir.Basarili
bir asker iyi bir aile babasidir";
$bulunacak_kelime = " deniz";
if (ereg($bulunacak_kelime,$kelimeler1,$kayit)) echo "Aradiginiz
'$kayit[0]' kelimesi bulundu !!!";
if (ereg($bulunacak_kelime,$kelimeler2,$kayit)) echo "Aradiginiz
'$kayit[0]' kelimesi bulundu !!!";
?>
Yukarida yanlizca ilk ornekteki deniz bulunacaktir.PHP tam
olarak sunu yapar,
$bulunacak_kelime = " deniz"; burada gorulen ilk once bir
"bosluk" ve ardindan gelen "d" "e" "n" "i" "z" harflerinin
arka arkaya yer aldigi ifadeyi bulacaktir :)))
Ozel Karekterler
Tabii ki "regular expression"lar yanlizca kelimelerin icinde
belirli gruplari bulmakta kullanilmaz....Bazi ozel yapilar
sayesinde bizlerin cok gelismis bazi yetenekleri kullanmamizi
saglarlar.
Bazi Karekterler'in Kullaniminda Dikkat Edilmesi Gereken
Hususlar
Ornegin *,?,/ @ gibi ozel anlami olan karekterlerin kendilerini
yazinsal olarak kullanmak isteyebiliriz.Simdiye kadar ogrendigimiz
konulardan bildiginiz gibi bu karekterlker programin genel
yapisi icinde ozel gorevlerde kullanilmaktaydi.Simdi sizlere
bunlari yazinsal olarak kullanmak istediginizde nasil bir
yol izleyebileceginizi anlatacagiz.Ilk olarak butun ozel karekterleri
tanimlayarak baslayalim,
Ozel ilgi gosterilmesi gereken karekterlerin tamami:
. * ? + [ ] ( ) { } ^ $ | \
Bu karekterleri yazinsal sekilde(mesela bu karekterlerin kendilerini
ekranda gostermek gibi) kullanmak isterseniz mutlaka onune
escape karekter dedigimiz, slash isaretini "\" getirmelisiniz.Bunlardan
baska olarak yazacaginiz her karekter "yazinsal" olarak ekranda
gosterilecektir...
Bir ornek vermek istersek,
<?php
//ereg_bul5.php
$kelimeler1 = "Turkiyenin kurucusu,onderimiz MUSTAFA KEMAL
ATATURK...";
$bulunacak_kelime = "ATATURK\.\.\.";
if (ereg($bulunacak_kelime,$kelimeler1,$kayit)) echo "Bulunan
kelime '$kayit[0]'";
?>
Eger bulunacak kelime icin "ATATURK..." girmis olsaydik (yani
slashlari kullanmasaydik)
<?php
//ereg_bul6.php
$kelimeler1 = "Lider ATATURK Modern Turkiyenin Kurucusu";
$bulunacak_kelime = "ATATURK...";
if (ereg($bulunacak_kelime,$kelimeler1,$kayit)) echo "Bulunan
kelime '$kayit[0]'";
?>
Bunun sonucunda donen deger : "ATATURK Mo"
Evet neler oluyor diye dusundunuz degilmi?Aslinda olan bir
sey yok yanlizca ilk defa bir ozel bir karekterin nasil kullanildigini
gordunuz."." karekteri herhangi bir tekil karekteri bulmasi
icin kullanilir.Bu durumda biz 3 tane nokta kullandik.ilki
"bosluk" ikincisi "M" ve ucuncusu de "o" degerinin karsiligi
oldu.(Yeni satirdan baska her karekterin bu sekilde karsiligi
olabilir bu ozel karekter.)
Kisayollar ve Secenekler
Bazi kisayollar, karekter gruplari ile calisirken kullanmamiz
icin bizlere sunulmustur.Kisaca bu ifadeler goz gezdirmek
istersek,
Karekter Siniflari - [xyz]
Bu koseli parentezlerin icine yazilan karekterlerin "kabul
edilebilir" olacagini belirtir.ornek vermek istersek $bulunacak_kelime
= "m[ui]zika" yazilirsa "muzika" ve "mizika" kelimelerinin
ikiside bulunacaktir.
Tersini yapmak istersek ^ karekterini kullanmaliyiz.Boylece
bu isaret'ten sonra yazacagimiz her karekter bulunmayacaktir.
$bulunacak_kelime = "^1234567890" yazarsak bu su demektir:
"Sayi haricindeki herseyi bul"
Eger belirli bir ASCII setini komple tanimlamak istiyorsak
o zaman "-" tire isareti kullanilmalidir.Yukarida yazilan
,ve butun sayilarin bulunmamamasini istedigimiz ornek
icin alternatif olarak su yazilabilir,
$bulunacak_kelime = [^0-9]
"Sayi haricindeki herseyi bul"
Ayni sekilde butun kucuk harfleri birden tanimlamak icin su
kullanilabilir,
[a-z]
Yazimizin bir sonraki bolumunde, web sayfasindan girilen e-mail
ve URL formatlarinin kontrolunu PHP ile nasil gerceklestirebilecegimizi
gorecegiz....
Her turlu gorus ve onerinizi sceylani@turk-php.com
adresine gonderebilirsiniz
Kendinize iyi bakin
Serkan Hadi Ceylani
serkan@turk-php.com
|