preg_replace_callback

(PHP 4 >= 4.0.5, PHP 5, PHP 7)

preg_replace_callbackGeriçağırım işlevi kullanarak düzenli ifadeye göre dizgede değişiklik yapar

Açıklama

preg_replace_callback ( mixed $ş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.

Değiştirgeler

ş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.

Dönen Değerler

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 Bilgisi

Sürüm: Açıklama
5.1.0 sayı değiştirgesi eklendi.

Örnekler

Ö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;
?>

Ayrıca Bakınız