PHP ile Regular Expression kullanarak belli karakterler arasındaki ifadeleri parse etmek

Bu yazıda PHP preg_match_all fonksiyonunu kullanarak herhangi bir String'de, belli karakterler arasında bulunan ifadeleri bulup (parse edip) ekrana bastıracağız. Bunun için Regular Expression'dan (düzenli ifadelerden) yararlanacağız. Ayrıca aynı yöntemle email adreslerini bulacağız.

PHP preg_match_all fonksiyonun kullanımı :

preg_match_all("düzenli ifade buraya", "Arama yapılacak String buraya", $bulunan_ifadeleri_icerecek_array );
- Fonksiyonun ilk parametresine düzenli ifadeyi yazarken bulunmasını istediğimiz ifadeyi parantezler içine almayı unutmamız gerek. Mesela :
"\+(.*?)\+" düzenli ifadesi aşağı resimdeki gibi iki '+' karakteri arasındaki tüm String'leri bulmaya yarar.

regular_expression_ornek_php parse
Örnek bir Regular Expression Matching kullanımı

- İkinici parametre arama yapacağımız String olacak.
- preg_match_all fonksiyonu otomatik olarak bulduğu ifadeleri 3. parametredeki değişkeni 2 boyutlu diziye dönüştürür. Örnek:

$bulunan_ifadeleri_icerecek_array[0] dizisi düzenli ifadeyle birlikte bulunan ifadeleri içerir.
$bulunan_ifadeleri_icerecek_array[1] dizisi bulunan ifadeleri içerir.

Düzenli ifadeyi Regular Expression kurallarına göre yazmamız gerekiyor. Regular Expression ile yeni tanışıyorsanız buradan öğrenebilirsiniz.

Örnekte arama yapacağımız bir String olacak . Örnekte farklı tipte karakterler arasında olanları parse edip ekrana bastıracağız. En sondaki düzenli id aynı String'de bulunan email adreslerini bulacağız.

Örnek PHP kodumuz:
<?php
// '<' ve '>' karakterterleri arasında kalan karakterleri yakalayacak ifade
$regular_expression_1 ="\<(.*?)\>";
// '[' ve ']' karakterterleri arasında kalan karakterleri yakalayacak ifade
$regular_expression_2 ="\[(.*?)\]";
// '+' ve '+' karakterterleri arasında kalan karakterleri yakalayacak ifade
$regular_expression_3 ="\+(.*?)\+";
// '*' ve '&' karakterterleri arasında kalan karakterleri yakalayacak ifade
$regular_expression_4 ="\*(.*?)\&";
// email adreslerini yakalayacak ifade
$regular_expression_5 ="([a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+)";

// Not : RegEx için anlam ifade eden özel karakterlerin ( *, [, + v.b.  ) önüne '\' koyulur.

// arama yapacağımız String
$text = "<ifade 1><ifade 2>ifade 3 ifade 4 [ifade 5] [ifade 6]   +ifade 7+ + ifade 8+ *ifade 9& name@asdft.com name1@asdft.com.tr name23@asdft.com * ifade 10& name33@asdft.com ";

echo "Arama yapacağımız karakter katarı : <br/> ".$text."<br/><br/>";

echo     "<hr/>";
echo "'<' ve '>' arasında olanlar : <br/>";
preg_match_all('#'.$regular_expression_1.'#' ,$text , $matches);
for ($i=0;  $i< sizeof($matches[1]);$i++)
    echo $matches[1][$i]."<br/>";
echo     "<hr/>";

echo "'[' ve ']' arasında olanlar : <br/>";
preg_match_all('#'.$regular_expression_2.'#' ,$text , $matches);
for ($i=0;  $i< sizeof($matches[1]);$i++)
    echo $matches[1][$i]."<br/>";    
echo     "<hr/>";    

echo "'+' ve '+' arasında olanlar : <br/>";
preg_match_all('#'.$regular_expression_3.'#' ,$text , $matches);
for ($i=0;  $i< sizeof($matches[1]);$i++)
    echo $matches[1][$i]."<br/>";
echo     "<hr/>";    
    
echo "'*' ve '&' arasında olanlar : <br/>";
preg_match_all('#'.$regular_expression_4.'#' ,$text , $matches);
for ($i=0;  $i< sizeof($matches[1]);$i++)
    echo $matches[1][$i]."<br/>";    
echo     "<hr/>";    

echo "bulunan email adresleri : <br/><br/>";
preg_match_all('#'.$regular_expression_5.'#' ,$text , $matches);
for ($i=0;  $i< sizeof($matches[1]);$i++)
    echo $matches[1][$i]."<br/>";
?>
Yukarıdaki kodun çıktısı :

PHP düzenli ifade parse regular expression parse
yazan Zülküf Küçüközer tarih   7th April 2010
primary key words  Php | Regular expression | Parse | Karakter okunma  30059
secondary key words  String | Düzenli ifade
writing Murat Köker writing 27th March 2013
Güzel bir makale olmus tesekkürler.