PCRE İşlevleri
PHP Manual

preg_match

(PHP 4, PHP 5)

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

Açıklama

int preg_match ( string $ş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.

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 seçenek dönen değerin bir dizi olmasına sebep olur. Dönen dizinin her elemanı da birer dizi olup, alt dizilerin 0 indisinde eşleşen dizge, 1 indisinde konu içindeki başlangıç konumu 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
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';

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
)

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


PCRE İşlevleri
PHP Manual