(PHP 4, PHP 5, PHP 7, PHP 8)
preg_match — Bir düzenli ifadeyi eşleştirmeye çalışır
$şablon
,$konu
,&$eşleşenler
= null
,$seçenekler
= 0,$başlangıç
= 0şablon
ile belirtilen düzenli ifadeyi eşleştirmek için konu
dizgesinde arama yapar.
şablon
Bir dizge olarak, aranacak şablon.
konu
Şablonla eşleşeceği düşünülen dizge.
eşleşmeler
Belirtildiği takdirde sonuçları içerecek dizi. $eşleşmeler[0] elemanı şablonun tamamıyla eşleşen metni, $eşleşmeler[1] ve sonrakiler yakalayan yaylı ayraçlı alt şablonlarla eşleşen alt dizgeleri içerir.
seçenekler
Bu bağımsız değişkende şu seçenekler bir arada belirtilebilir:
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ıç konumu bulunur.
<?php
preg_match('/(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] => foobarbaz [1] => 0 ) [1] => Array ( [0] => foo [1] => 0 ) [2] => Array ( [0] => bar [1] => 3 ) [3] => Array ( [0] => baz [1] => 6 ) )
PREG_UNMATCHED_AS_NULL
Bu seçenek kullanılmışsa, eşleşmeyen alt şablonlar null
döndürür, kullanılmadığında ise boş dizge döndürür.
<?php
preg_match('/(a)(b)*(c)/', 'ac', $eşleşmeler);
var_dump($eşleşmeler);
preg_match('/(a)(b)*(c)/', 'ac', $eşleşmeler, PREG_UNMATCHED_AS_NULL);
var_dump($eşleşmeler);
?>
Yukarıdaki örneğin çıktısı:
array(4) { [0]=> string(2) "ac" [1]=> string(1) "a" [2]=> string(0) "" [3]=> string(1) "c" } array(4) { [0]=> string(2) "ac" [1]=> string(1) "a" [2]=> NULL [3]=> string(1) "c" }
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($konu, $başlangıç)
ile konu dizgede belirtilen başlangıca göre bir alt dizge aktarmaya eşdeğer değildir. Çünkü, şablon, ^, $, (?<=x) gibi savlar içerebilir. Şu iki örneği karşılaştıralım:1. örnek:
<?php
$konu = "abcdef";
$şablon = '/^def/';
preg_match($şablon, $konu, $eşleşmeler, PREG_OFFSET_CAPTURE, 3);
print_r($eşleşmeler);
?>Yukarıdaki örneğin çıktısı:
Array ( )2. örnek:
<?php
$konu = "abcdef";
$şablon = '/^def/';
preg_match($şablon, substr($konu,3), $eşleşmeler, PREG_OFFSET_CAPTURE);
print_r($eşleşmeler);
?>Yukarıdaki örneğin çıktısı:
Array ( [0] => Array ( [0] => def [1] => 0 ) )substr() kullanımından kaçınmak için,
başlangıç
bağımsız değişkeninde her ikisi de çalışan^
demiri veyaA
değiştiricisi yerine bir seçenek olarak\G
savı da kullanılabilir.
preg_match() işlevi eğer şablon
ile konu
eşleşirse 1, eşleşmezse 0 ve başarısızlık durumunda false
döner
Bu işlev mantıksal false
değeriyle dönebileceği gibi false
olarak değerlendirilebilecek mantıksal olmayan bir değerle de dönebilir. Bu konuda daha fazla bilgi Mantıksal Değerler bölümünde bulunabilir. Bu işlevden dönen değeri sınamak için ===
işleci kullanılabilir.
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 - Metin içinde "php" dizgesini bulmak
<?php
// Şablonun ardına konan "i" aramanın harf büyüklüğüne
// duyarsız olacağını belirtir.
if (preg_match("/php/i", "PHP bir betik dilidir.")) {
echo "Eşleşme sağlandı.";
} else {
echo "Eşleşme sağlanamadı.";
}
?>
Örnek 2 - "cebir" sözcüğünü bulmak
<?php
if (preg_match("/\bcebir\b/i", "Cebir en sevdiğim derstir.")) {
echo "Eşleşme var.";
} else {
echo "Eşleşme yok.";
}
if (preg_match("/\bcebir\b/i", "Cebirci yazılı yapacak!")) {
echo "Eşleşme var.";
} else {
echo "Eşleşme yok.";
}
?>
Örnek 3 - Bir adresten alan ismini çekip almak
<?php
// adresten alan ismini alalım
preg_match('@^(?:http://)?([^/]+)@i',
"http://www.php.net/index.html", $matches);
$host = $matches[1];
// alan adının son iki parçasını alalım
preg_match('/[^.]+\.[^.]+$/', $host, $matches);
echo "alan adı: {$matches[0]}\n";
?>
Yukarıdaki örneğin çıktısı:
alan adı: php.net
Örnek 4 - İsimli alt şablon kullanımı
<?php
$dizge = 'mesela: 2008';
preg_match('/(?P<isim>\w+): (?P<sene>\d+)/', $dizge, $eşleşmeler);
// Bu da olur:
// preg_match('/(?<isim>\w+): (?<sene>\d+)/', $dizge, $eşleşmeler);
print_r($eşleşmeler);
?>
Yukarıdaki örneğin çıktısı:
( [0] => mesela: 2008 [isim] => mesela [1] => mesela [sene] => 2008 [2] => 2008 )
Bir dizgeyi başka bir dizge ile eşleştirmek için bu işlevi değil, bu işi daha hızlı yapan strpos() işlevini kullanın.