preg_match

(PHP 4, PHP 5, PHP 7, PHP 8)

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

Açıklama

preg_match(
    string$şablon,
    string$konu,
    array&$eşleşenler = null,
    int$seçenekler = 0,
    int$başlangıç = 0
): int|false

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

Bağımsız Değişkenler

ş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 veya A değiştiricisi yerine bir seçenek olarak \G savı da kullanılabilir.

Dönen Değerler

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

Uyarı

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.

Hatalar/İstisnalar

Düzenli ifade şablonu derlendiğinde geçerli bir düzenli ifade haline gelmezse bir E_WARNING çıktılanır.

Sürüm Bilgisi

Sürüm: Açıklama
7.2.0seçenekler bağımsız değişkeninde artık PREG_UNMATCHED_AS_NULL destekleniyor.

Ö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

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 )

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

Ayrıca Bakınız

To Top