Kategoriler
PHP

PHP’de Düzenli İfadeler (Regular Expressions)

Daha önce buradaki paylaşımım da düzenli ifadelerin temel kullanım şekline değinmiş ve farklı programlama dillerinde ki kullanımlarını anlatacağımı söylemiştim. İlk sırayı PHP aldı. Düzenli ifadeler hakkında bir fikriniz yoksa ya da desende kullanılan özel karakterleri bilmiyorsanız öncelikle Düzenli İfadeler başlıklı paylaşıma göz gezdirmelisiniz. Zira burada yazacaklarım o içeriğin devamı niteliğindedir.

Regex Desen (Pattern) Ayarları

PHP de düzenli ifade kullanabilmek için deseni “/” işareti arasında bildirilir. Desenin sonundaki “/” işaretinden sonra PHP’nin deseni istediğiniz şekilde algılamasını sağlayan ayar bildirimi yapılır. Ayar karakterlerini ve anlamlarını aşağıdaki tablodan inceleyerek kullanabilirsiniz.

Karakter Açıklama
iBüyük/küçük karakterlere duyarsız olur
gİlk eşleşmede işlemi sonlandırmaz,
desene uygun yapıları aramaya devam eder.
sSatır başı hariç her şeyi ifade eden nokta karakterinin
satır başını da ifade etmesini sağlar
m^ ve $ karakterlerinin her satırın başını ve sonunu ifade etmesini sağlar
uUTF-8 kodlu desenlerin doğru şekilde eşleştirilmesini sağlar.

preg_match_all() kullanma

Bir dizenin tamamı içerisinde istenilen desenden kaç adet olduğunu bulmak için kullanılır.

$str = "Bir programlama dili olarak PHP dili son derece güçlüdür.";
echo preg_match_all("/dil/i", $str); //Output: 2

Bir eşleşme bulamazsa false ya da null döndürür.

Eşleşmeler alınmak isteniyorsa 3 parametre olarak, eşleşmeleri bir dizi olarak içine aktaracağı bir değişken bekler.

$str = "Bir programlama dili olarak PHP dili son derece güçlüdür.";
preg_match_all("/dil/i", $str, $out);
print_r($out);

çıktısı:

Array
 (
     [0] => Array
         (
             [0] => dil
             [1] => dil
         )
 )

preg_match() kullanma

Bir dize içerisinde istenilen deseni içerip içermediğini söyler. İstenilen desen dize içerisinde varsa 1, yoksa 0 döner. İlk eşleşme sağlandığında tarama işlemi durur.

$str = "Regex kullanarak kodlama yapmak çok güzeldir.";
if(preg_match("/regex/i", $str)){
    echo "Aradığınız desen bu dize içerisinde var.";
}else{
    echo "Aranılan desen bulunamadı!";
}

Eşleşmeler alınmak isteniyorsa aynı preg_match_all() fonksiyonunda olduğu gibi eşleşmeyi içine aktaracağı bir değişken belirtilmelidir.

$str = "Regex kullanarak kodlama yapmak çok güzeldir.";
if(preg_match("/regex/i", $str, $out)){
    print_r($out);
}else{
    echo "Aranılan desen bulunamadı!";
}

çıktısı:

Array
 (
     [0] => Regex
 )

preg_replace() kullanma

Bir dize içerisinde aranılan desene uyan bölümleri başka bir dize ile değiştirmek için kullanılır.

$str = "Python hızlı bir dildir.";
echo preg_replace("/python/i", "PHP", $str); // Output: "PHP hızlı bir dildir."

Dizilerle kullanım şekli de aşağıdaki gibidir;

$subject = array('1', 'a', '2', 'b', '3', 'A', 'B', '4');
$pattern = array('/\d/', '/[a-z]/', '/[1a]/');
$replace = array('A:$0', 'B:$0', 'C:$0');

$preg = preg_replace($pattern, $replace, $subject);
print_r($preg);

aşağıdaki gibi bir çıktı üretir;

Array
(
    [0] => A:C:1
    [1] => B:C:a
    [2] => A:2
    [3] => B:b
    [4] => A:3
    [5] => A
    [6] => B
    [7] => A:4
)

preg_filter() kullanımı

Bir dize içerisinde düzenli ifadeyi arar ve yenisiyle değiştirir. Bir dizi ile kullanılırsa dizi, bir dize ile kullanılırsa dize döndürür. preg_filter() fonksiyonu değiştirilmiş olması olası dizeleri döndürmesi dışında preg_replace() fonksiyonu gibi çalışır.

$subject = array('1', 'a', '2', 'b', '3', 'A', 'B', '4');
$pattern = array('/\d/', '/[a-z]/', '/[1a]/');
$replace = array('A:$0', 'B:$0', 'C:$0');

$preg = preg_filter($pattern, $replace, $subject);
print_r($preg);

yukarıdaki kod aşağıdaki gibi çıktı üretir;

Array
 (
     [0] => A:C:1
     [1] => B:C:a
     [2] => A:2
     [3] => B:b
     [4] => A:3
     [7] => A:4
 )

preg_grep() kullanımı

Dizi içerisinde düzenli ifadeyle eşleşenleri içeren bir dizi döndürür.

$array = [1,3,8,"Selim",13,72,"Ahmet"];
print_r(preg_grep("/\d/", $array));

çıktısı aşağıdaki gibidir;

Array
 (
     [0] => 1
     [1] => 3
     [2] => 8
     [4] => 13
     [5] => 72
 )

preg_quote() kullanımı

Bir dize içerisindeki düzenli ifadelere ait özel karakterlerini önceler.

$str = '$40 for a g3/400';
echo preg_quote($str, "/");

çıktısı:

\$40 for a g3\/400

preg_split() kullanımı

Bir dizeyi belirtilen desenlerden parçalar.

$str = "hypertext language, programming";
$out = preg_split("/[\s,]+/", $str);
print_r($out);

çıktısı:

Array
 (
     [0] => hypertext
     [1] => language
     [2] => programming
 )

düzenli ifadeleri kullanmanız şart değilse explode() fonksiyonu çok daha hızlı çalışacaktır.

Yazar Muhammet ŞAFAK

1992 İstanbul doğumluyum. 2008 yılından beri profesyonel olarak PHP geliştiriyorum. Her ne kadar ağırlıklı olarak PHP üzerinde çalışsam da C, C++, Python, Java programlama dillerini de kullanıyorum.

Bir Cevap Yazın