preg_match() Perl Uyumlu Düzenli Ifadeler (PCRE) fonksiyonlarindan biridir. Bu fonksiyon programciya
metin isleme konusunda diger metin fonksiyonlarindan daha çok esneklik saglar.
Preg_match() düzenli ifadeler kullanarak bir metin blogunu baska bir metnin içinde bulmak için
kullanilir.
Preg_match() 3 tane ifadeye ihtiyaç duyar. Bunlar
1. Düzenli ifade (regex)
2. Kaynak metin
3. Bir dizi degisken
Preg_match() sonuç olarak eslesen bir ifade varsa 1, eslesen bir ifade bulunamazsa 0 döndürür.
|
PHP- Kodu: |
|
|
|
|
<?php $kaynak= "Michael Jordan is a great player"; if (preg_match( "/J.r/", $kaynak, $dizi)) print $dizi[0] // Ekrana Jor yazdirir ?>
|
|
|
|
|
Burada düzenli ifademiz "/J.r/" ve metin içerisinde önce J, onu takip eden herhangi bir (1)
karakter (.) ve daha sonra bir r ariyor. Slash isaretleri ise (/) delimiter olarak adlandirilirlar
ve düzenli ifademizin sinirlarini belirlerler. Bir diger örnek ile devam edelim.
|
PHP- Kodu: |
|
|
|
|
<?php $kaynak = "Michael Jordan is a great player"; if ( preg_match( "/J.*n/", $kaynak, $dizi ) ) print $dizi[0] // Ekrana Jordan yazdirir ?>
|
|
|
|
|
Bu örnekte ise önce bir J, ardinda herhangi bir (1) karakter, ardindan herhangi bir oranda herhangi
bir karakter ve son olarak da bir n ariyoruz metnimizin içinde. Bu durumda .* için "herhangi bir
oranda herhangi bir karakter" diyebiliriz.
Zaman zaman * yerine + kullanmak da tercih edilebilir. + "bir veya daha fazla karakter"
manasindadir. + ve * arasindaki fark ise +'nın 0'ı da içermesidir.
".*" = >=1
"+" = >=0
Düzenli ifadeler için açgözlüdür denebilir. Çünkü düzenli ifadeler aramanin ilk ve son sonucu
arasindaki her seyi bulmak isterler.
|
PHP- Kodu: |
|
|
|
|
<?php $metin= "string strong big stung"; If ( preg_match( "/s.*g/", $metin, $dizi) ) Print $dizi[0]; // Ekrana string strong big stung yazdirir ?>
|
|
|
|
|
Eger sadece ilk bulunan ifadeyi istiyorsak bir ? eklememiz gerekir.
|
PHP- Kodu: |
|
|
|
|
<?php $metin= "string strong big stung"; If ( preg_match( "/s.*?g/", $metin, $dizi) ) Print $dizi[0]; // Ekrana string yazdirir ?>
|
|
|
|
|
Bir metin içerisinde bizim kriterlerimize uygun olan tüm degerleri bir dizi içine atmak istersek
preg_match_all() fonksiyonunu kullanmamiz gerekir.
|
PHP- Kodu: |
|
|
|
|
<?php $metin= "string strong big stung"; If ( preg_match_all( "/s.*?g/", $metin, $dizi) ) Echo "<pre>"; Print var_dump($dizi); Echo "</pre>"; /* Ekrana array(1) { [0]=> array(3) { [0]=> string(6) "string" [1]=> string(6) "strong" [2]=> string(5) "stung" } } Yazdirir */ ?>
|
|
|
|
|
Ayrica düzenli ifadeler içinde verilerin türlerini ifade eden karakterler kullanarak belirli
karakterleri arayabiliriz.
|
PHP- Kodu: |
|
|
|
|
<?php $metin= "Bugün 06-01-05"; If ( preg_match("/\d*-\d*-\d*/", $metin, $dizi)) Print $dizi[0]; //Ekrana 06-01-05 yazdirir ?>
|
|
|
|
|
Burada aramada \d ondalik rakami ifade eder. Düzenli ifadelerle arama yaparken kullanilabilen veri
türleri ve içerdikleri degerler asagidaki listede gösterilmistir.
Ifade Tür Içerigi
\d Ondalik Sayi [0-9]
\D Ondalik olmayan herhangi bir karakter [^0-9]
\s Bosluk karakter [\t\n\r\f]
\S Bosluk karakteri disindaki herhangi bir karakter [^ \t\n\r\f]
\w "word" karakter [a-zA-Z0-9_]
\W "non-word" karakter [^a-zA-Z0-9_]