(PHP 4 >= 4.0.5, PHP 5, PHP 7)
preg_replace_callback — Geriçağırım işlevi kullanarak düzenli ifadeye göre dizgede değişiklik yapar
$şablon
, callback $geriçağırım
, mixed $konu
[, int $sınır
= -1
[, int &$sayı
]] ) : mixed
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.
ş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.
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);
?>
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 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;
?>