MultiServis.Net //PHP El Kitabı

<<= Önceki Sayfa | PHP Ana Sayfa | Sonraki Sayfa =>>

Hata Yapilari'nin Ele Alinmasi - BOLUM 4 Yazar: Serkan Tarih: 01/03/02

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

<<= Önceki Sayfa | PHP Ana Sayfa | Sonraki Sayfa =>>