(PHP 4 >= 4.0.5, PHP 5, PHP 7, PHP 8)
preg_replace_callback — Geriçağırım işlevi kullanarak düzenli ifadeye göre dizgede değişiklik yapar
$şablon
,$geriçağırım
,$konu
,$sınır
= -1,&$sayı
= null
,$seçenekler
= 0
yenisi
bağımsız değişkeninin yerini bir
geriçağırım
işlevinin alması dışında, davranış
bakımından preg_replace() işlevine hemen hemen
eşdeğerdir.
şablon
Aranacak şablon. Tek bir dizge olabileceği gibi çok sayıda dizge içeren bir dizi de olabilir.
geriçağırım
konu
dizgesiyle eşleşen elemanlardan oluşan bir
dizi ile çağrılıp yer değiştirilecek dizgeleri içeren bir dizi döndüren
bir geriçağırım işlevinin ismi. İşlevin sözdizimi:
preg_replace_callback() için geriçağırım işlevine genellikle tek bir yerde ihtiyaç vardır. Bu durumda, preg_replace_callback() çağrısı içinde geriçağırım işlevini bildirmek için anonim bir işlev kullanılabilir. Böylece çağrı için gereken tüm bilgi tek bir yerde toplanmış olur ve bir daha başka bir yerde kullanılmayacak olan geriçağırım işlevi, işlev isim alanında kalabalık etmez.
Örnek 1 - preg_replace_callback() ve anonim işlev
<?php
/* Paragraf başlangıcındaki büyük harfi küçük harfe çevirmek
için bir Unix tarzı komut satırı uygulaması */
$fp = fopen("php://stdin", "r") or die("std girdi okunamadı");
while (!feof($fp)) {
$konu = fgets($fp);
$konu = preg_replace_callback(
'|<p>\s*\w|',
function ($eşleşmeler) {
return strtolower($eşleşmeler[0]);
},
);
echo $konu;
}
fclose($fp);
?>
konu
Şablonun aranacağı yer değiştirmeye konu dizge veya dizi.
sınır
Her konu
dizgesinde her şablon için olası azami
yer değiştirme sayısı. -1
öntanımlıdır (sınırsız).
sayı
Belirtildiği takdirde yapılan yer değiştirmelerin sayısı bu bağımsız değişkene konur.
seçenekler
seçenekler
bağımsız değişkeni, eşleşen dizinin biçimini
açıklamak için PREG_OFFSET_CAPTURE
ve
PREG_UNMATCHED_AS_NULL
seçeneklerini bir arada
içerebilir. Ayrıntılar preg_match() işlevinde
bulunabilir.
konu
bağımsız değişkeni bir dizi ise
preg_replace_callback() de bir dizi döndürür aksi
takdirde bir dizge döner. Hata durumunda daima null
döner.
Eşleşmeler bulunduğu takdirde yeni konu
döner, aksi
takdirde bir hata oluşmamışsa konu
değiştirilmeden
döndürülür.
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.4.0 |
seçenekler bağımsız değişkeni eklendi.
|
Örnek 2 - 1. preg_replace_callback() örneği
<?php
// Bu metindeki 2002'yi 2003 yapacağız
$metin = "Zafer Bayramı 30/08/2002 tarihinde olacak,\n";
$metin.= "Cumhuriyet bayramı ise 29/10/2001 tarihinde idi.\n";
// geriçağırım işlevi
function gelecek_sene($eşleşenler)
{
// normalde: $eşleşenler[0] eşleşmenin tamamını,
// $eşleşenler[1] (...) içindeki ilk altşablonla eşleşen kısmı,
// $eşleşenler[n] (...) içindeki n. altşablonla eşleşen kısmı içerir
return $eşleşenler[1].($eşleşenler[2]+1);
}
echo preg_replace_callback(
"|(\d{2}/\d{2}/)(\d{4})|",
"gelecek_sene",
$metin);
?>
Yukarıdaki örneğin çıktısı:
Zafer Bayramı 30/08/2003 tarihinde olacak, Cumhuriyet bayramı ise 29/10/2002 tarihinde idi.
Örnek 3 - 2. preg_replace_callback() örneği
<?php
$input = "plain [indent] deep [indent] deeper [/indent] deep [/indent] plain";
function parseTagsRecursive($input)
{
$regex = '#\[indent]((?:[^[]|\[(?!/?indent])|(?R))+)\[/indent]#';
if (is_array($input)) {
$input = '<div style="margin-left: 10px">'.$input[1].'</div>';
}
return preg_replace_callback($regex, 'parseTagsRecursive', $input);
}
$output = parseTagsRecursive($input);
echo $output;
?>