Bienvenue sur le site des Expressions Régulières Icone page d'accueil - Les expressions régulières php Accueil   Icone articles sur les expressions régulières en php Articles d'Expreg - Billets de Fred   Icone nos regex - Les expressions régulières php Les regex d'Expreg Icone mail - Les expressions régulières php

La fonction preg_replace_callback

Bison les expressions rationnelles en php Le comportement de preg_replace_callback 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 qui sera appelée, avec les éléments trouvés en arguments.
Cette fonction retourne alors la chaîne de remplacement.
Comme un exemple vaut mieux qu'un long discours, il vous suffit d'analyser ceux donnés en-dessous.

Exemples avec preg_replace_callback


Exemple 1

 Récupérer une valeur numérique dans un nom de fichier 
Niveau de compréhension :moyen

<?php
$image
="image125.jpg";

function
ajoute($masque)
{
return
$masque[1].($masque[2]+1).$masque[3];
}
$image=preg_replace_callback('`(\w*?)(\d+)?(\.jpg)`','ajoute',$image);

echo
$image;

?>

Explication :
Imaginons dans cet exemple un nom de fichier image avec chiffres que l'on doit récupérer et incrémenter d'une unité.
Cet exemple de callback va matcher les parties du nom définies dans le masque.
On va récupérer ces parties séparément, les traiter et reconstituer la chaîne d'origine avec l'incrémentation réalisée.


Exemple 2

 Mise en majuscule sur un prénom composé 
Niveau de compréhension : facile

<?php
$chaine
='Mise en majuscule des initiales sur un prénom composé comme anne-marie.';
function
mot_compose($masque){
return
ucfirst($masque[1]).'-'.ucfirst($masque[2]);
}
echo
preg_replace_callback('`([[:alpha:]]+)-([[:alpha:]]+)`','mot_compose',$chaine);
?>

Explication :
Un autre exemple simple pour illustrer l'emploi de callback.
Ce test porte sur la mise en majuscules des premières lettres d'un prénom composé.


Exemple 3

 Césure d'url placée dans un texte 
Niveau de compréhension :moyen

<?php
$texte
= 'Et voici un lien dans une page <http://www.expreg.com/index.php>
auquel on va appliquer une césure'
;
function
cesure_lien($match) {
return
'<a href="'.$match[1].'" target="_blank">'.substr($match[1],0,15).'...</a>';    
}
echo
preg_replace_callback('`<((https?|ftp)://\S+)>`', cesure_lien,$texte);

// affichera :  http://www.expr...
?>

Explication :
Une césure de lien dans un texte.
Toute la puissance de preg_replace_callback


Exemple 4

 Une coloration syntaxique simple sur le principe de [php] le code [/php] 
Niveau de compréhension : moyen

<?php
$ch
='un texte avec [php]<?php echo "salut";  ?>[/php] suivi de mots,
puis [php]<?php echo "encore ça en couleur"; ?>[/php] et on termine
avec [php]<?php echo "ceci aussi en couleur"; ?>[/php] et voilà'
;

function
color_code($match)
{
return
highlight_string($match[1], TRUE);
}
$chaine=preg_replace_callback('`\[php](.+?)\[/php]`i','color_code',$ch);
echo
$chaine;
?>

Explication :
Un simple colorateur syntaxique pour votre code php.
Evite l'emploi de la "mauvaise option" e avec preg_replace.
Ajoutez l'option s pour travailler sur plusieurs lignes.

Cette portion est très simple. Bien qu'elle puisse être utilisée telle qu'elle pour réaliser un colorateur syntaxique, il ne faut pas en attendre des miracles.
Je ne l'ai utilisée ici que pour illustrer la fonction de callback.


Exemple ..

  
Niveau de compréhension :


Explication :


Rédaction Yves Maistriaux :: Mai 2003 Dernière mise à jour :: Décembre 2005


European Cards - Hosting-Ec Validation W3C European Cards - Hosting-Ec Validation W3C © 2003 - 2008 www.expreg.com - Toutes reproductions interdites sans l'autorisation écrite des auteurs
:::::::::: Design an Hosting by : European Cards Sprl ::::::::::