(PHP 4 >= 4.0.5, PHP 5)
preg_replace_callback — Esegue ricerche e sostituzioni con espressioni regolari usando il callback
$espressione_regolare
      , callback $callback
      , mixed  $testo
      [, int  $limite
     ] )
     Fondamentalmente questa funzione si comporta come
     preg_replace(), eccetto che per la 
     presenza del callback. Con quest'ultimo
     parametro si indica una funzione da richiamare a cui verrà
     passata una matrice con i testi riconosciuti in testo.
     La funzione di callback dovrebbe restituire la stringa da sostituire.
    
Example #1 Esempio dell'uso di preg_replace_callback()
<?php 
// questo test è stato usato nel 2002
// lo si vuole avere aggiornato per il 2003
$text = "April fools day is 04/01/2002\n"; 
$text.= "Last christmas was 12/24/2001\n"; 
// la funzione di callback
function next_year($matches) 
{ 
// come solito: $matches[0] è il testo riconosciuto completo
// $matches[1] la parte riconosciuta per il primo criterio
// racchiuso in '(...)' e così via
return $matches[1].($matches[2]+1); 
}
echo preg_replace_callback(
     "|(\d{2}/\d{2}/)(\d{4})|",
     "next_year",
     $text);
// il risultato sarà:
// April fools day is 04/01/2003
// Last christmas was 12/24/2002
?>
     Spesso si ha la necessità di richiamare la funzione callback
     soltanto in un unico posto.
     In questo caso si può utilizzare create_function()
     per dichiarare una funzione anonima come callback per 
     preg_replace_callback().In questo modo si
     hanno tutte le informazioni per la chiamata in un unico posto
     e non si disperde con funzioni di callback non
     utilizzate altrove.
    
Example #2 preg_replace_callback() e create_function()
<?php
/* Un filtro da linea di comando stile Unix che converte
 * la maiuscole poste all'inizio delle parole in minuscolo */
$fp = fopen("php://stdin", "r") or die("can't read stdin");
while (!feof($fp)) {
      $line = fgets($fp);
      $line = preg_replace_callback(
             '|<p>\s*\w|',
             create_function(
                  // l'apice singolo è essenziale qui, 
                  // o in alternativa occorre usare la sequenza di escape \$ 
                  // per tutte le occorrenze di $ 
                 '$matches',
                 'return strtolower($matches[0]);' 
                 ), 
               $line 
      );
      echo $line; 
}
fclose($fp);
?>
Vedere anche preg_replace() create_function(), e informazioni sul tipo callback.