(PHP 4 >= 4.0.5, PHP 5)
preg_replace_callback — Geriçağırım işlevi kullanarak düzenli ifadeye göre dizgede değişiklik yapar
yenisi değiştirgesinin yerini bir geriçağırım işlevinin alması dışında, davranış bakımından preg_replace() işlevine hemen hemen eşdeğerdir.
Aranacak şablon. Tek bir dizge olabileceği gibi çok sayıda dizge içeren bir dizi de olabilir.
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.
Genellikle geriçağırım işlevi preg_replace_callback() işlevinin çağrısı sırasında bir satıriçi işlev olarak kullanılır. Böyle bir durumda, geriçağırım işlevi olarak bir anonim işlev bildirimi için bir anonim işlev (PHP 5.3.0'dan beri) veya create_function() kullanılır. 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 create_function()
<?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)) {
$line = fgets($fp);
$line = preg_replace_callback(
'|<p>\s*\w|',
create_function(
// Buradaki tek tırnaklar önemli yoksa
// $ imlerini \$ olarak öncelemek gerekir.
'$matches',
'return strtolower($matches[0]);'
),
$line
);
echo $line;
}
fclose($fp);
?>
Şablonun aranacağı yer değiştirmeye konu dizge veya dizi.
Her konu dizgesinde her şablon için olası azami yer değiştirme sayısı. -1 öntanımlıdır (sınırsız).
Belirtildiği takdirde yapılan yer değiştirmelerin sayısı bu değiştirgeye konur.
konu değiştirgesi 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.
Sürüm: | Açıklama |
---|---|
5.1.0 | sayı değiştirgesi 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;
?>