CodeBlanks Logo Icon CodeBlanks

preg_match_all() ile tüm eşleşmeler

PHP kursu · İleri seviye · Ders 43/92

preg_match_all() ile bir dizedeki tüm eşleşmeleri almayı öğrenirsin.

preg_match_all ile tüm eşleşmeler

preg_match yalnız ilk eşleşmeyi bulur. Tüm eşleşmeleri istiyorsan preg_match_all($pattern, $subject, $matches) kullanılır.

Dönüş değeri eşleşme sayısıdır (0, 1, 2, ...). Eşleşmeler $matches dizisinde, varsayılan olarak PREG_PATTERN_ORDER düzeninde saklanır: $matches[0] tüm eşleşmeleri içeren bir dizidir.

Yani her etiketi veya her sayıyı tek tek almak için foreach ($matches[0] as $m) kalıbı yaygındır.

PREG_PATTERN_ORDER ve PREG_SET_ORDER

preg_match_all'ın dördüncü parametresi, eşleşmelerin nasıl dizileceğini belirler. İki yaygın seçenek vardır:

PREG_PATTERN_ORDER (varsayılan): $matches[0] tüm eşleşmelerin listesi, $matches[1] ilk grubun tüm eşleşmeleri. Grupları sütun sütun dizer.

PREG_SET_ORDER: $matches[0] ilk eşleşmenin tüm grupları, $matches[1] ikinci eşleşmenin tüm grupları. Her eşleşmeyi kendi başına bir dizi olarak dizer.

Uygulama Tüm etiketleri bul

$post = "Bugün #php ve #regex çalışıyoruz"; dizesindeki tüm #etiket'leri preg_match_all ile bul. Deseni $pattern'e al, çağrıyı $matches'la yap ve foreach ile her etiketi yeni satırda yazdır.

Örnek çözümü göster
Deseni "/#\w+/" yap. preg_match_all($pattern, $post, $matches) çağır. foreach ($matches[0] as $tag) { echo $tag . "\n"; } ile yazdır.
Örnek çözüm:
<?php
// preg_match_all ile tüm etiketleri (#...) bul

$post = "Bugün #php ve #regex çalışıyoruz";
// deseni, matches ve çağrıyı ekle
$pattern = "/#\w+/";
preg_match_all($pattern, $post, $matches);

// her etiketi yeni satırda yazdır
foreach ($matches[0] as $tag) {
    echo $tag . "\n";
}

Kendini test et

  1. preg_match_all hangi değeri döndürür?

    • Eşleşen toplam sayı
    • İlk eşleşen metin
    • true veya false
    • Eşleşmelerin dizi hali
    Cevabı göster

    Eşleşen toplam sayı — Doğru. Dönüş değeri eşleşme sayısıdır; eşleşmelerin kendisi $matches'tedir.

  2. Eşleşmeler üzerinde döngü

    foreach (____ as $tag) {
        echo $tag . "\n";
    }
    Cevabı göster
    foreach ($matches[0] as $tag) {
        echo $tag . "\n";
    }
  3. Sabitler ve anlamları

    PREG_PATTERN_ORDER
    Grupları sütun olarak dizer
    PREG_SET_ORDER
    Eşleşmeleri satır olarak dizer
    $matches[0]
    Tüm eşleşmelerin listesi
    preg_match_all
    Tüm eşleşmeleri bulan fonksiyon

İleri seviye bölümündeki tüm dersler