(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
/* \b işleci şablonun tam bir sözcükle eşleşeceğini belirtir,
yani "cebir" eşleşirken "cebirci", "cebirsel "eşleşmez.*/
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.