Imp Posté 20 Mai 2006 Posté 20 Mai 2006 (modifié) Bonsoir, J'ai des textes avec notes de bas de page que j'importe de MySQL. Je voudrais pouvoir convertir, par exemple [n1] en <sup><a href="#nf1" id="n1">1</a></sup> [n2] en <sup><a href="#nf2" id="n2">2</a></sup> Et ainsi de suite. Mais j'avoue que j'ai du mal à commencer. Ce qui m'embête c'est bien sûr que le numéro change. Il faudrait pouvoir faire : cherche tous les [nx] et remplace par le code <sup><a href="#nfx" id="nx">x</a></sup> Seulement je ne sais pas trop comment cela serait possible. Quelqu'un pourrait me mettre sur la voie ? Merci d'avance Modifié 20 Mai 2006 par Imp
TheRec Posté 20 Mai 2006 Posté 20 Mai 2006 Bonsoir, les expressions régulières servent à ce genre de tâches : <?php $text = 'Voila une note [n1] et une autre [n2].'; $text = preg_replace('/\[n([0-9]+)\]/i','<sup><a href="#nf\\1" id="n\\1">\\1</a></sup>',$text); echo $text;?> Si c'est nouveau pour toi, le manuel PHP donne des explications sur la syntaxe des masques et des options de recherches. En l'occurrence, le masque utilisé dans ce cas est assez simple (on peu faire beaucoup plus compliqué). Le maque doit être délimité, dans notre cas j'ai choisis "/" comme délimiteur, après le délimiteur de fin il y a un "i" qui définit que le marque est insensible à la casse (majuscules/minuscules sans importance). Ensuite "\[" représente le caractère "[" mais étant donnée qu'il s'agit également du caractère utilisé pour créer une classe de caractère il faut l'échapper (avec un antislash), il en va de même pour "\]". Après le "n" correspond au "n" de ta balise, puis j'ouvre une parenthèse pour créer un sous-masque, à l'intérieur je crée une classe de caractères de 0 à 9 (d'où le "0-9") et je précise qu'il doit y avoir au moins 1 caractère ou plus de cette clase (comme ça [n1245] sera aussi reconnu...enfin c'est pour te montrer qu'il n'y a pas de "limite")... Dans le deuxième paramètre de preg_replace, je spécifie ce qui remplacera les morceaux qui auront correspondu au masque. La seule particularité est l'utilisation des références arrières, dans ce cas c'est "\\1", il indique que c'est le contenu premier sous-masque qui devra être ajouté ici (dans notre cas c'est le numéro de la note)... Le paramètre suivant est la chaîne à analyser.
Imp Posté 21 Mai 2006 Auteur Posté 21 Mai 2006 bonjour, Merci beaucoup d'avoir donné la solution et surtout l'explication Ca m'ouvre de belles perspectives !
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant