preg_replace_callback

(PHP 4 >= 4.0.5)

preg_replace_callback --  Rechercher/remplacer avec une expression régulière et fonction de callback

Description

mixed preg_replace_callback ( mixed pattern, callback callback, mixed subject [, int limit])

Le comportement de preg_replace() est presque identique à celui de preg_replace(), hormis le fait qu'à la place du paramètre replacement, il faut spécifier une fonction de callback callback qui sera appelée, avec les éléments trouvés en arguments. Cette fonction retourne alors la chaîne de remplacement.

Exemple 1. Exemple avec preg_replace_callback()

<?php
  
// Ce texte &eacute;tait vrai en 2002
  // nous voulons le mettre a jour pour 2003
  
$text = "Le premier avril est le 01/04/2002\n";  
  
$text.= "Le dernier noel &eacute;tait le 12/24/2001\n";  
  
  
// Fonction de callback
  
function next_year($matches) {
    
// comme d'habitude : $matches[0] repr&eacute;sente la valeur totale
    // $matches[1] repr&eacute;sente la premi&egrave;re parenth&egrave;se capturante
    
return $matches[1].($matches[2]+1);
  }

  echo
preg_replace_callback(
              
"|(\d{2}/\d{2}/)(\d{4})|",
              
"next_year",
              
$text);

  
// retourne ceci :
  // Le premier avril est le 01/04/2003
  // Le dernier noel &eacute;tait le 12/24/2002
?>

Vous aurez souvent besoin de la fonction callback avec preg_replace_callback() à un seul endroit. Dans ce cas, vous pouvez simplement utiliser la fonction create_function() pour déclarer une fonction anonyme comme fonction de callback pour preg_replace_callback(). En faisant cela, vous concentrez toutes les routines liées à votre remplacement à un seul endroit, et nous ne polluez par votre espace de noms de fonctions avec des fonctions à usage unique.

Exemple 2. Exemples avec preg_replace_callback() et create_function()

<?php
  
// Un filtre de ligne de commande Unix pour convertir les lettres
  // en majuscule de d&eacute;but des paragraphe en minuscules

    
$fp = fopen("php://stdin", "r") or die("Impossible de lire la ligne de commande");
    while (!
feof($fp)) {
        
$line = fgets($fp);
        
$line = preg_replace_callback(
              
'|<p>\s*\w|',
              
create_function(
                
// Les guillemets simples sont tr&egrave;s importants ici
                // ou bien il faut prot&eacute;ger les caract&egrave;res $ avec \$
                
'$matches',
                
'return strtolower($matches[0]);'
              
),
              
$line
            
);
        echo
$line;
    }
    
fclose($fp);
?>

Voir aussi preg_replace() et create_function().