(PHP 4, PHP 5, PHP 7)
preg_match — Bir düzenli ifadeyi eşleştirmeye çalışır
$şablon
, string $konu
[, array &$eşleşenler
[, int $seçenekler
[, int $başlangıç
]]] )
ş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 değiştirgede şu seçenekler belirtilebilir:
PREG_OFFSET_CAPTURE
konu
içindeki başlangıç konumunu bulunur.
başlangıç
konu
dizgesinde aramanın başlatılacağı konum;
isteğe bağlı olup bayt cinsinden belirtilir.
Bilginize:
başlangıç
değiştirgesinin kullanımı, substr($konu, $başlangıç) 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. Şu iki örneği karşılaştıralım:1. örnek:
<?php
$subject = "abcdef";
$pattern = '/^def/';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);
print_r($matches);
?>Yukarıdaki örneğin çıktısı:
Array ( )2. örnek:
<?php
$subject = "abcdef";
$pattern = '/^def/';
preg_match($pattern, substr($subject,3), $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
?>Yukarıdaki örneğin çıktısı:
Array ( [0] => Array ( [0] => def [1] => 0 ) )
preg_match() işlevi şablon
ile
eşleşme sayısını döndürür. Değer olarak, hiç eşleşme olmadığını belirtmek
üzere 0 veya eşleşme olduğunu belirtmeki üzere 1 döner; çünkü
preg_match() ilk eşleşmeyi bulur bulmaz döner.
preg_match_all() ise tersine,
konu
dizgesinin sonuna kadar eşleşenleri arar. Bir
hata oluşması durumunda işlev FALSE
döndürür.
Sürüm: | Açıklama |
---|---|
5.2.2 | İsimli alt şablonlar artık (?<isim>), (?'isim') ve (?P<isim>) sözdizimleri ile kabul ediliyor. Önceki sürümlerde sadece (?P<isim>) kabul edilmekteydi. |
4.3.3 |
başlangıç değiştirgesi eklendi
|
4.3.0 |
PREG_OFFSET_CAPTURE seçeneği eklendi.
|
4.3.0 |
seçenekler değiştirgesi eklendi.
|
Ö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';
// PHP 5.2.2 ve sonrasında çalışır
preg_match('/(?<isim>\w+): (?<sene>\d+)/', $dizge, $eşleşmeler);
// PHP 5.2.2 öncesinde bu gerekiyordu:
// preg_match('/(?P<isim>\w+): (?P<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 )