array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'tr', ), 'this' => array ( 0 => 'function.preg-match-all.php', 1 => 'preg_match_all', ), 'up' => array ( 0 => 'ref.pcre.php', 1 => 'PCRE İşlevleri', ), 'prev' => array ( 0 => 'function.preg-last-error.php', 1 => 'preg_last_error', ), 'next' => array ( 0 => 'function.preg-match.php', 1 => 'preg_match', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'tr', 'path' => 'reference/pcre/functions/preg-match-all.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 4, PHP 5, PHP 7, PHP 8)
preg_match_all — Kapsamlı bir düzenli ifade eşleştirmesi yapar
$şablon
,$konu
,&$eşleşmeler
= null
,$seçenekler
= 0,$başlangıç
= 0
şablon
ile belirtilen düzenli ifadeyi eşleştirmek
için konu
dizgesinde arama yapar ve bulunanları
seçenekler
ile belirtilen sırada
eşleşmeler
dizisine yerleştirir.
İlk eşleşme bulunduğunda arama işlemi bitmez, dizgenin sonuna kadar sürdürülür.
şablon
Bir dizge olarak, aranacak şablon.
konu
Şablonla eşleşeceği düşünülen dizge.
eşleşmeler
seçenekler
bağımsız değişkenine göre sıralanmış olarak
tüm eşleşenleri içerecek dizi.
seçenekler
Aşağıdaki seçeneklerin bir birleşimi belirtilebilir (Dikkat:
PREG_PATTERN_ORDER
ve
PREG_SET_ORDER
birlikte beklenen yararı sağlamaz.):
PREG_PATTERN_ORDER
$eşleşmeler[0] şablonun tamamıyla eşleşen dizgeyi, $eşleşmeler[1] ve sonrakiler alt şablonlarla eşleşen alt dizgeleri içermek üzere sonuçları sıralar.
<?php
preg_match_all("|<[^>]+>(.*)</[^>]+>|U",
"<b>örnek: </b><div align=left>bu bir denemedir</div>",
$out, PREG_PATTERN_ORDER);
echo $out[0][0] . ", " . $out[0][1] . "\n";
echo $out[1][0] . ", " . $out[1][1] . "\n";
?>
Yukarıdaki örneğin çıktısı:
<b>örnek: </b>, <div align=left>bu bir denemedir</div> örnek: , bu bir denemedir
Böylece, $out[0] şablonun tamamıyla eşleşen dizgeleri içeren bir dizi, $out[1] ise etiketler arasında kalan dizgeleri içeren bir dizi içerir.
Şablon, isimli alt şablonlar içeriyorsa,
$eşleşmeler
ayrıca anahtarları alt şablon
ismi olan öğeleri de içerir.
Şablon, yinelenen isimli alt şablonlar içeriyorsa,
$eşleşmeler[iSiM]
yalnızca en sağdaki alt
şablonu içerir.
<?php
preg_match_all(
'/(?J)(?<isim>foo)|(?<isim>bar)/',
'foo bar',
$eşleşmeler,
PREG_PATTERN_ORDER
);
print_r($eşleşmeler['isim']);
?>
Yukarıdaki örneğin çıktısı:
Array ( [0] => [1] => bar )
PREG_SET_ORDER
$eşleşmeler[0] ilk eşleşme kümesini, $eşleşmeler[1] ve sonrakiler sonraki eşleşme kümelerini içermek üzere çıktıyı sıralar.
<?php
preg_match_all("|<[^>]+>(.*)</[^>]+>|U",
"<b>örnek: </b><div align=\"left\">bu bir denemedir</div>",
$out, PREG_SET_ORDER);
echo $out[0][0] . ", " . $out[0][1] . "\n";
echo $out[1][0] . ", " . $out[1][1] . "\n";
?>
Yukarıdaki örneğin çıktısı:
<b>örnek: </b>, örnek: <div align="left">bu bir denemedir</div>, bu bir denemedir
PREG_OFFSET_CAPTURE
Bu seçenek etkin olduğunda, her eşleşme bulunduğunda sonraki arama
başlangıcı da (bayt cinsinden) döner. Bu durumda, dönen dizinin
her elemanı ayrıca birer dizi olup, her elemanın
0
indisinde eşleşen dizge,
1
indisinde ise konu
içindeki başlangıç konumunu bulunur.
<?php
preg_match_all('/(foo)(bar)(baz)/', 'foobarbaz', $eşleşmeler, PREG_OFFSET_CAPTURE);
print_r($eşleşmeler);
?>
Yukarıdaki örneğin çıktısı:
Array ( [0] => Array ( [0] => Array ( [0] => foobarbaz [1] => 0 ) ) [1] => Array ( [0] => Array ( [0] => foo [1] => 0 ) ) [2] => Array ( [0] => Array ( [0] => bar [1] => 3 ) ) [3] => Array ( [0] => Array ( [0] => baz [1] => 6 ) ) )
PREG_UNMATCHED_AS_NULL
Bu seçenek kullanılırsa, eşleşmeyen alt şablonlar null
olarak,
kullanılmazsa boş bir dize olarak rapor edilir.
Bir sıralama seçeneği belirtilmediği takdirde
PREG_PATTERN_ORDER
öntanımlıdır.
başlangıç
konu
dizgesinde aramanın başlatılacağı konum;
isteğe bağlı olup bayt cinsinden belirtilir.
Bilginize:
başlangıç
bağımsız değişkeninin kullanımı,substr($subject, $offset)
ile konu dizgede belirtilen başlangıca göre işleve bir alt dizge aktarmaya eşdeğer değildir. Çünkü, şablon, ^, $, (?<=x) gibi savlar içerebilir. Örnekler için preg_match() işlevine bakınız.
başarısızlık durumunda false
döner, aksi takdirde şablonun tamamıyla eşleşenlerin
sayısını (0 olabilir) döndürür.
Düzenli ifade şablonu derlendiğinde geçerli bir düzenli ifade haline gelmezse
bir E_WARNING
çıktılanır.
Sürüm: | Açıklama |
---|---|
7.2.0 |
seçenekler bağımsız değişkeninde artık
PREG_UNMATCHED_AS_NULL destekleniyor.
|
Örnek 1 - Bir metinden telefon numaralarının toplanması
<?php
preg_match_all("/\(? (\d{3})? \)? (?(1) [\-\s] ) \d{3}-\d{4}/x",
"555-1212 veya 1-800-555-1212 numarayı arayın", $teller);
?>
Örnek 2 - HTML etiketlerini bulmak (tamahkarca)
<?php
// \\2 bir geriye gönderim örneği olup PCRE'ye düzenli ifadenin
// ikinci yaylı ayraçlı grubuyla eşleşeceğini söyler; yani ([\w]+) ile.
// Dizge çift tırnak içine alınmış olduğundan çift tersbölü kullanılmıştır.
$html = "<b>Vurgulanmış metin</b><a href=howdy.html>buraya tıklayın</a>";
preg_match_all("/(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/",
$html, $eşleşenler, PREG_SET_ORDER);
foreach ($eşleşenler as $eşleşen) {
echo " eşleşen: " . $eşleşen[0] . "\n";
echo "1. parça: " . $eşleşen[1] . "\n";
echo "2. parça: " . $eşleşen[2] . "\n";
echo "3. parça: " . $eşleşen[3] . "\n";
echo "4. parça: " . $eşleşen[4] . "\n\n";
}
?>
Yukarıdaki örneğin çıktısı:
eşleşen: <b>Vurgulanmış metin</b> 1. parça: <b> 2. parça: b 3. parça: Vurgulanmış metin 4. parça: </b> eşleşen: <a href=howdy.html>buraya tıklayın</a> 1. parça: <a href=howdy.html> 2. parça: a 3. parça: buraya tıklayın 4. parça: </a>
Örnek 3 İsimli alt şablon kullanımı
<?php
$konu = <<<FOO
a: 1
b: 2
c: 3
FOO;
preg_match_all('/(?P<isim>\w+): (?P<rakam>\d+)/', $konu, $eşleşenler);
// Bu da olur:
//preg_match_all('/(?<isim>\w+): (?<rakam\d+)/', $konu, $eşleşenler);
print_r($eşleşenler);
?>
Yukarıdaki örneğin çıktısı:
Array ( [0] => Array ( [0] => a: 1 [1] => b: 2 [2] => c: 3 ) [isim] => Array ( [0] => a [1] => b [2] => c ) [1] => Array ( [0] => a [1] => b [2] => c ) [rakam] => Array ( [0] => 1 [1] => 2 [2] => 3 ) [2] => Array ( [0] => 1 [1] => 2 [2] => 3 ) )