Si tu veux connaitre les détails il faut voir la fonction preg_replace_callback() justement ![;)](https://www.developpez.net/forums/images/smilies/icon_wink.gif)
Je t'explique:
$str = preg_replace_callback("#\<a(.*)href\='([^']*)'(.*)>(.+)\<\/a\>#", "delete_spaces", $chaine);
delete_spaces est une fonction vers laquelle renvoit cette expression régulière pour le remplacement de la chaine cherchée. Tu peux donc y placer des conditions, des traitements, et en fonction de ceux-ci remplacer par ce que tu veux. $chaine c'est tout simplement la variable dans laquelle se trouve le texte déjà formaté (par ta fonction qui place des espaces). Ma fonction delete_spaces est donc:
1 2 3 4 5 6
| function delete_spaces($results)
{
return "<a ".$results[1]." href='".str_replace(" ", "", $results[2])."' ".$results[3].">".
$results[4].
"</a>";
} |
Par définition dans le manuel, la fonction vers laquelle est renvoyé le regex comporte un paramètre, tu lui donnes le nom que tu veux (ici $results). Cette variable contient dans un tableau tout ce que tu as récupéré dans les parenthèses capturantes du regex ($results[0] est tout ce qui a été récupéré, $results[1] la première parenthèse, $results[2] la deuxième etc).
Donc comme tu vois cette fonction retourne (return) un nouveau lien avec les options présentes dans les liens trouvés ($results[1], $results[3]), son texte ($results[4]) et enfin son adresse ($results[2]) qui est traitée de façon à remplacer les espace (" ") par rien ("").
Si t'as encore des problèmes dit le moi.
Partager