preg_match

(PHP 4, PHP 5, PHP 7)

preg_matchBir düzenli ifadeyi eşleştirmeye çalışır

Açıklama

preg_match ( string $şablon , string $konu [, array &$eşleşenler [, int $seçenekler [, int $başlangıç ]]] ) : int

şablon ile belirtilen düzenli ifadeyi eşleştirmek için konu dizgesinde arama yapar.

Değiştirgeler

ş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
Bu seçenek etkin olduğunda, her eşleşme bulunduğunda sonraki arama başlangıcı da 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.
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$matchesPREG_OFFSET_CAPTURE3);
print_r($matches);
?>

Yukarıdaki örneğin çıktısı:

Array
(
)

2. örnek:

<?php
$subject 
"abcdef";
$pattern '/^def/';
preg_match($patternsubstr($subject,3), $matchesPREG_OFFSET_CAPTURE);
print_r($matches);
?>

Yukarıdaki örneğin çıktısı:

Array
(
    [0] => Array
        (
            [0] => def
            [1] => 0
        )

)

Dönen Değerler

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 Bilgisi

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.

Örnekler

Ö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
)

Notlar

İpucu

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() veya strstr()işlevini kullanın.

Ayrıca Bakınız