Général
- Présentation
- Les Symboles
- Les Métacaractères
- Les Ancres et Classes
- Les options
- Constantes prédéfinies
- Equivalences
- Créer un motif
- Les POSIX
- Les PCRE
- Les Plus des PCRE
- Les Assertions Part I
- Les Assertions Part II
- Motif conditionnel
- Mysql et les regex
- Url Rewriting
- Optimisation
- Aide mémoire
Les PCRE
Les POSIX
Pratique
Linux
Spécial php
- Conseils et Astuces
- Délimiteur PCRE
- Créer une bdd
- Utiliser du BBcode
- Le binaire
- Faire un panier
- Cases à cocher
- Citations imbriquées
- Colorateur syntaxique
- Les list-box ou combo-box
- Faire un diaporama
- Isset ou empty ?
- Une légende au survol
- Site en plusieurs langues
- Requêtes dynamiques
- Gestion des smiley
- Faire un moteur de template
- Timestamp php/mysql
- Timestamp mysql
- Matcher une adresse email
- Controler des données
Les billets de fred
- Les POSIX... mise en pratique !
- Limiter l'accès à un répertoire
- Alternance de couleurs
- Magic_quotes
- Désactiver les short_tags
- Require ou include : Bench
- Cohérence dans les chaines de caractères
- "echo" : lapin ou tortue ?
- Gérer un formulaire avec plusieurs boutons
- Le formulaire a t'il été soumis ?
- J'ai décidé de grossir
- La guerre des étoiles
- La guerre des boutons
- Headers already sent
- IP, IP, IP, houra !
- Créer un itérateur avec PHP5
- On vous conduit vers la lumière
- Comment utiliser MySQL avec PHP
- Non aux booléens !
- Php.ini : dist /recommended
- Include : gouffre ou fêlure ?
- Simple comme les sessions !
- Simplifier le traitement des erreurs
- Structurez vos applications
- Franchement, t'es trop for !
- Notice: Undefined variable (ou index)
- Proscrire les variables auto déclarées
La fonction preg_replace_callback
Le comportement de preg_replace_callback est presque identique à celui de preg_replace, hormis le fait qu'à la place du paramètre remplacement, 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 texteNiveau 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.
