PHP Düzenli ifadeler -3 preg_match_all() Fonksiyonu

Düzenli ifadeler, geliştiriciler için çok kullanışlı bir araçtır. Bir kelimeyi, karakteri veya herhangi bir diziyi bulmaya, tanımlamaya veya değiştirmeye izin verirler. Bu eğitim size PHP Düzenli ifadesinde nasıl ustalaşacağınızı öğretecek ve herhangi bir web geliştiricisinin araç setinde olması gereken son derece kullanışlı, kullanıma hazır PHP düzenli ifadelerini Konusunu gösterecektir.

Preg_Match_All() , belirli kalıplar için bir dize aramak için kullanılır ve sonuçları bir dizide saklar. Bir eşleşme bulduktan sonra aramayı durduran preg_match'in aksine , preg_match_all Tüm dizeyi arar ve Tüm eşleşmeleri kaydeder.

Sözdizimi:

preg_match_all (desen, dize, $dizi, isteğe bağlı_sıralama, isteğe bağlı_offset)

Desen : Gereklidir. Ne aranacağını gösteren düzenli bir ifade içerir.

Dize : Gereklidir. Aramanın gerçekleştirileceği metin.

$dizi : İsteğe bağlı. Bu parametrede kullanılan değişken, bulunan tüm eşleşmeleri içeren bir diziyle doldurulacaktır.

isteğe bağlı_sıralama : İsteğe bağlı. Eşleşme dizisinin nasıl yapılandırıldığını değiştiren bir dizi seçenek.

isteğe bağlı_offset : İsteğe bağlı. Varsayılan olarak 0'dır. Aramaya başlamak için dizenin ne kadar ilerisinde olduğunu gösterir. Preg_match_All() fonksiyonu, bu parametrede verilen konumdan önce gerçekleşen eşleşmeleri bulamaz.


Bir Kelime Aramak

Regex ile yapılabileceğimiz en basit işlem kelime aramaktır, bunun için direkt aramak istediğimiz kelimeyi yazmak yeterli. Örnek olarak düzenli ifademize hava yazıyoruz. Ve elde edeceğimiz sonuçta hava kelimelerinin seçildiğini görebilirsiniz.


<?php
$str = "bu gün hava çok güzel. Hava bugün açık";
$pattern = "/hava/";

preg_match_all($pattern, $str, $matches);

echo "<pre>";
print_r($matches);
echo "<pre>";
?>

ÇIKTI: Array olarak verir.

Array
(
    [0] => hava
)

preg_match() fonksiyonu Aradığını bulunca aramayı sonlandırır. preg_match_all() fonksiyonu Tüm metindekileri arar fonksiyonun sonunda bulunan All ifadesi Tüm demektir; Ama metindeki "Hava" kelimesini bulmamıştır. Sebebi Regex ifadelerde Küçük-Büyük harf duyarlılığı vardır. Bayraklar(Flags) belirtmemiz gerekir. i harfiyle Eşleşmeyi büyük/küçük harf duyarlı olmayan bir şekilde yaparız.


/ hava /i

Kodlarımız en son şu şekilde olur.


<?php
$str = "bu gün hava çok güzel. Hava bugün açık";
$pattern = "/Hava/i";

preg_match_all($pattern, $str, $matches);

echo "<pre>";
print_r($matches);
echo "<pre>";
?>

ÇIKTI: Array olarak verir.

Array
(
    [0] => Array
        (
            [0] => hava
            [1] => Hava
        )

)

ÖRNEK: Büyük harf, küçük harf, sayı ve "_" bulan kodları yazalım. desenimiz şöyle olacak:


/\w/

ÖRNEK:


<?php
$str = "Bu gün 123 hava çok _ güzel.";
$pattern = "/\w/";

preg_match_all($pattern, $str, $result);

echo "<pre>";
print_r($result);
echo "<pre>";
?>

ÇIKTI:

Array
(
    [0] => Array
        (
            [0] => B
            [1] => u
            [2] => g
            [3] => n
            [4] => 1
            [5] => 2
            [6] => 3
            [7] => h
            [8] => a
            [9] => v
            [10] => a
            [11] => o
            [12] => k
            [13] => _
            [14] => g
            [15] => z
            [16] => e
            [17] => l
        )

)

Dikkat ettiyseniz Büyük-Küçük harfleri, sayıları ve alt çizgiyiyi getirdi, Nokta işaretini almadı. Türkçe karakterleride getirmedi. Bunun için bayrak(flags) belirtmemiz gerekir. u harfiyle Eşleşmeyi unicode yani Türkçe karekterleride kapsar.


/\w/u

ÖRNEK:


<?php
$str = "Bu gün 123 hava çok _ güzel.";
$pattern = "/\w/u";

preg_match_all($pattern, $str, $result);

echo "<pre>";
print_r($result);
echo "<pre>";
?>

ÇIKTI:

Array
(
    [0] => Array
        (
            [0] => B
            [1] => u
            [2] => g
            [3] => ü
            [4] => n
            [5] => 1
            [6] => 2
            [7] => 3
            [8] => h
            [9] => a
            [10] => v
            [11] => a
            [12] => ç
            [13] => o
            [14] => k
            [15] => _
            [16] => g
            [17] => ü
            [18] => z
            [19] => e
            [20] => l
        )

)

Yukarda örnekte görüldüğü gibi Türkçe karakterler Geldi. Köşeli ayraçlar kullandığımızda Misal [a-z] Burdaki dil ingilizceye göredir. Ne kadar u bayrağını kullansanızda Türkçe karekterler çıkmaz. Köşeli parantez içine Türkçe karekterleride yazın.


<?php
$str = "Bu gün hava çok güzel ığüşöçİĞÜŞÖÇ.";

$pattern = "/[a-zA-ZığüşöçİGÜŞÖÇ]/iu";

preg_match_all($pattern, $str, $result);

echo "<pre>";
print_r($result);
echo "<pre>";
?>

ÇIKTI:

Array
(
    [0] => Array
        (
            [0] => B
            [1] => u
            [2] => g
            [3] => ü
            [4] => n
            [5] => h
            [6] => a
            [7] => v
            [8] => a
            [9] => ç
            [10] => o
            [11] => k
            [12] => g
            [13] => ü
            [14] => z
            [15] => e
            [16] => l
            [17] => ı
            [18] => ğ
            [19] => ü
            [20] => ş
            [21] => ö
            [22] => ç
            [23] => İ
            [24] => Ğ
            [25] => Ü
            [26] => Ş
            [27] => Ö
            [28] => Ç
        )

)

ÖRNEK: Desen değiştiricilerden x ifadesini kullanalım. Bize desendeki boşlukları kullanmamazı sağlar.


<?php
$str = "Web yazılımında öğrenilecek proğramlardan biri php dersidir. 

php çok kolay bir ders";

$pattern = "/p h p/";

preg_match_all($pattern, $str, $result);

echo "<pre>";
print_r($result);
echo "<pre>";
?>

ÇIKTI:

Array
(
    [0] => Array
        (
        )

)

Örneğimizde "p h p" deseninde boşluklar olduğu için bulmadı desen değiştiricilerden x'i kullanırsak bulacak.


<?php
$str = "Web yazılımında öğrenilecek proğramlardan biri php dersidir. 

php çok kolay bir ders";

$pattern = "/p h p/x";

preg_match_all($pattern, $str, $result);

echo "<pre>";
print_r($result);
echo "<pre>";
?>

ÇIKTI:

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

)

Diğer regex Konularin Linki

Lütfen konu haricinde soru sormayın cevaplanmayacaktır. Yorumunuz onaylandıktan sonra yayınlanacaktır. Lütfen Yukarıda ki mesajları okuyun tekrar aynı soruları sormayın.

1864

KATEGORİ
  • HTML
  • CSS
  • PHP
  • JQUERY
  • PHOTOSHOP
  • JavaScript
  • Web Dünyası
  • Linux
  • MİTHRİL FRAMEWORK
  • Laravel
  • Git
  • React
POPÜLER MAKALE
  • HTML LİNK(Bağlantı)EKLEME - LİNK VERME
  • HTML YAZI VE RESİM ORTALAMA
  • HTML RESME LİNK VERME
  • HTML FORM OLUŞTURMA
  • CSS YATAY MENÜ YAPIMI
  • HTML RESİM EKLEME
  • CSS (BOYUT) GENİŞLİK VE YÜKSEKLİK (Width-Height)
  • HTML DİV ve SPAN NEDİR?
  • HTML ARKAPLANA MÜZİK EKLEME
  • KALİTE KAYBETMEDEN RESİMLERİ BÜYÜTME
ETİKET
WEBCEBİR © 2013 Tüm hakları saklıdır.