tepisenordek
08-11-2007, 20:45 PM
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:
1. <?php $kaynak= "Michael Jordan is a great player";
2. if (preg_match( "/J.r/", $kaynak, $dizi))
3. print $dizi[0]
4. // 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:
1. <?php $kaynak = "Michael Jordan is a great player";
2. if ( preg_match( "/J.*n/", $kaynak, $dizi ) )
3. print $dizi[0]
4. // 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:
1. <?php $metin= "string strong big stung";
2. If ( preg_match( "/s.*g/", $metin, $dizi) )
3. Print $dizi[0];
4. // Ekrana string strong big stung yazdirir ?>
Eger sadece ilk bulunan ifadeyi istiyorsak bir ? eklememiz gerekir.
PHP:
1. <?php $metin= "string strong big stung";
2. If ( preg_match( "/s.*?g/", $metin, $dizi) )
3. Print $dizi[0];
4. // 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:
1. <?php $metin= "string strong big stung";
2. If ( preg_match_all( "/s.*?g/", $metin, $dizi) )
3. Echo "<pre>";
4. Print var_dump($dizi);
5. Echo "</pre>";
6.
7. /* Ekrana
8. array(1) {
9. [0]=>
10. array(3) {
11. [0]=>
12. string(6) "string"
13. [1]=>
14. string(6) "strong"
15. [2]=>
16. string(5) "stung"
17. }
18. }
19. Yazdirir */ ?>
Ayrica düzenli ifadeler içinde verilerin türlerini ifade eden karakterler kullanarak belirli
karakterleri arayabiliriz.
PHP:
1. <?php $metin= "Bugün 06-01-05";
2. If ( preg_match("/\d*-\d*-\d*/", $metin, $dizi))
3. Print $dizi[0];
4. //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_]
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:
1. <?php $kaynak= "Michael Jordan is a great player";
2. if (preg_match( "/J.r/", $kaynak, $dizi))
3. print $dizi[0]
4. // 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:
1. <?php $kaynak = "Michael Jordan is a great player";
2. if ( preg_match( "/J.*n/", $kaynak, $dizi ) )
3. print $dizi[0]
4. // 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:
1. <?php $metin= "string strong big stung";
2. If ( preg_match( "/s.*g/", $metin, $dizi) )
3. Print $dizi[0];
4. // Ekrana string strong big stung yazdirir ?>
Eger sadece ilk bulunan ifadeyi istiyorsak bir ? eklememiz gerekir.
PHP:
1. <?php $metin= "string strong big stung";
2. If ( preg_match( "/s.*?g/", $metin, $dizi) )
3. Print $dizi[0];
4. // 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:
1. <?php $metin= "string strong big stung";
2. If ( preg_match_all( "/s.*?g/", $metin, $dizi) )
3. Echo "<pre>";
4. Print var_dump($dizi);
5. Echo "</pre>";
6.
7. /* Ekrana
8. array(1) {
9. [0]=>
10. array(3) {
11. [0]=>
12. string(6) "string"
13. [1]=>
14. string(6) "strong"
15. [2]=>
16. string(5) "stung"
17. }
18. }
19. Yazdirir */ ?>
Ayrica düzenli ifadeler içinde verilerin türlerini ifade eden karakterler kullanarak belirli
karakterleri arayabiliriz.
PHP:
1. <?php $metin= "Bugün 06-01-05";
2. If ( preg_match("/\d*-\d*-\d*/", $metin, $dizi))
3. Print $dizi[0];
4. //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_]