PHP preg_match_all ile düzenli ifadeler

preg_match_all nesnesini genellikle cURL ile okuduğumuz bir web sitesindeki iki tag arasında bulunan ifadeleri almak için kullanırız . Bu kullanımı dışında örnek olarak bir değişkendeki tüm sonu “malı” ile biten kelimeleri bulmak içinde kullanabiliriz.

söz konusu fonksiyonu kullanmak veya anlamak biraz ilk başlarda zor gelecektir çünkü bana sorarsanız perl gibi karakterler ile anlaşmanız gerekecektir.

preg_match_all(‘<pattern>’,$aranacak,$sonuc);

PatternAçıklama
‘/b/’Aradığımız değişken içerisinde küçük e harfi bulunan tüm ifadeleri döndürür
‘/b/’Aradığımız değişken içerisinde büyük E harfi bulunan tüm ifadeleri döndürür
‘/e/i’yukarıdaki iki ifadede büyük ve küçük harfleri aradık bu ifadede ise küçük veya büyük olmasının farketmeyeceği yani tüm e harfleri için arama yapılacağını ifade eder
‘/>$/i’> sonrasında yer alan $ işareti ifadenin sonun > ile biten tüm ifadelerin alınacağını belirtir.
‘/^</i’yukarıdaki örnektekin tam tersi yani başında  < karakterinin yer aldığı tüm ifadeleri döndürür
‘/(meli|malı)/i’() Yuvarlak parantezler grup yapmak içindir.Bu grubun içinde ifadeler (veya) “|” işareti ile ayrılabilir. İçeriğinde
meli veya malı geçen ifadeler demektir.
‘/avc[iı]/i’“[]” Köşeli parantezin yerine, içinde ki karakterlerden sadece bir tanesi kullanılabilir. İ veya I harflerinden birisinin yer alması gereklidir,
‘/avc[^iı]/i’“[]” Köşeli parantezler içinde ki “^” işareti, kendinden sonra gelen karakterlerin haricinde karakterler kullanılabilir demektir.
r,m,n harfleri köşeli parantezin olduğu konumda kullanılamazlar.
‘/k.le/i’“.” işareti herhangi bir karakteri ifade etmek için kullanılır.
‘/ko./i’“.” işareti herhangi bir karakteri ifade etmek için kullanılır.
‘/sar*/i’“*” işareti kendinden önce gelen karakteri veya grubu yok sayabilir ya da çok sayıda tekrar edebilir demektir.
‘/tar*kan/i’“*” işareti kendinden önce gelen karakteri veya grubu yok sayabilir ya da çok sayıda tekrar edebilir demektir.
‘/kitap(lar|ler)*/i’“*” işareti kendinden önce gelen karakteri veya grubu yok sayabilir ya da çok sayıda tekrar edebilir demektir.
‘/ph?p/i’“?” işareti kendinden önce gelen karakteri veya grubu yok sayabilir ya da bu karakter bir defa kullanılabilir demektir.
‘/an+ka/i’Artı “+” işareti “*” dan farklı olarak önceki karakter veya grubun en az bir defa bulunması koşulunu getirir.
‘/15{2}/i’Kümeli parantez “{}” işareti kendinden önceki karakter veya grubun tekrar edilme miktarını belirler.Eğer tek bir değer yazılırsa; yazılan değer kadar tekrar şarttır. Küme parantezi içine iki değer virgül ile ayrılarak yazılırsa; tekrar, soldaki küçük değerden az ve sağdaki büyük değerden fazla olamaz.
‘/ma{2,4}ş/i’Kümeli parantez “{}” işareti kendinden önceki karakter veya grubun tekrar edilme miktarını belirler.Eğer tek bir değer yazılırsa; yazılan değer kadar tekrar şarttır. Küme parantezi içine iki değer virgül ile ayrılarak yazılırsa; tekrar, soldaki küçük değerden az ve sağdaki büyük değerden fazla olamaz.
‘/201\d/’“\d”, digit kelimesinin baş harfi olan “d” harfi, regex ifadelerde önüne ters slash “\” karakteri alarak kullanıldığında herhangi bir rakamı ifade eder.
‘/201\D/’“\D”, digit kelimesinin baş harfi olan büyük “D” harfi, regex ifadelerde önüne ters slash “\” karakteri alarak kullanıldığında rakam haricinde ki karakterleri ifade eder.”\d” ifadesinin tam tersidir.”[^0-9]” ifadesi ile aynı anlama gelir.
‘/201[0-9]/’Köşeli parantez içinde bir sayısal aralık kullanıldığında, o aralıkta ki herhangi bir rakamı ifade eder.Yukarıda ki “/d” ve “[0-9]” ifadeleri aynı anlama gelir. Digit veriler.
‘/201[^0-9]/’Köşeli parantez içinde bir sayısal aralık kullanılmadan önce “^” işareti kullanılmışsa buraya bu aralığın haricinde bir karakter gelmeli demektir.
‘/can\w/i’“\w”, word kelimesinin baş harfi olan küçük “w” harfi, regex ifadelerde önüne ters slash “\” karakteri alarak kullanıldığında herhangi bir harf, rakam veya alt çizgi (Türkçe harfler hariç) Alfanümerik [a-zA-Z0-9_] karakterleri ifade eder. “\w” yerine [a-zA-Z0-9_] ifadesi de kullanılabilir.
‘/can\W/i’“\W”, Word kelimesinin baş harfi olan büyük “W” harfi, regex ifadelerde önüne ters slash “\” karakteri alarak kullanıldığında Alfanümerik olmayan [^a-zA-Z0-9_] karakterleri ifade eder. “\W” yerine [^a-zA-Z0-9_] ifadesi de kullanılabilir.
‘/can\skurtaran/i’“\s”, boşluk karakterleri ifade eder. “\s” yerine boşluk karakterleri olan [ \t\n\r\f] ifadesi de kullanılabilir.
‘/can\S/i’“\S”, boşluk olmayan karakterleri ifade eder. “\S” yerine boşluk karakteri olmayan [^ \t\n\r\f] ifadesi de kullanılabilir.
‘/\bve\b/i’“\b” karakterleri arasında ki ifadenin tam olarak geçmesi gerektiğini ifade eder.
‘/\Bve\B/i’“\B” karakterleri arasında ki ifade “\b” karakterinin zıttı anlamına gelmektedir. Yani ifadenin tek başına bulunmaması gerekiyor.

 

PHP preg_match_all ile tag arasındaki yazıları alma

preg_match_all("#&amp;lt;a.*?&amp;gt;(.*?)&amp;lt;\/a&amp;gt;#i",$aranacak,$sonuc);

yukarıdaki işlem neticesinde bize okuduğumuz sayfadaki tüm <a> tagları arasındaki link yazılarını verecektir,

diğer bir ifade olarak href verilerini alalım yani okuduğumuz sayfadaki tüm linkleri almak için aşağıdaki ifadeyi kullanabiliriz,

preg_match_all("/href=\"([^\"]+)/i",$aranacak,$veri);

$aranacak ifadesi içindeki tüm linkleri alarak $veri içerisine kayıt ediyoruz yani $veri içerisinde sayfada bulunan tüm linkler dizi şeklinde kayıt edildi,

preg_match_all ifadesinde kullanılan terimlerden bahsetmek gerekirse;