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
sBirden fazla satır varsa tüm satırların kontrol edilmesini sağlar.
xDesen içerisindeki boşlukları yok sayar.
uUTF-8 kodlu desenlerin doğru şekilde eşleştirilmesini sağlar.

Not : Bu içerik PHP’de düzenli ifadeler için kullanabileceğiniz fonksiyonlar üzerinde durulmuştur. Düzenli ifade desenlerinin yazımı ve örnekler ile anlatımı için PHP’de Düzenli İfade Deseni Yazımı başlıklı içeriğe bakabilirsiniz.


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.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s