Expression régulière PHP

Résolu
guewini -  
 guewini -
Bonjour,

Je souhaiterai utiliser la fonction ereg_replace ou preg_replace (je n'en sais trop rien) afin d'arriver au résultat suivant :

Chaine d'origine : [img='url_img']texte alternatif[ /img]

Chaine finale : <img src="url_img" alt="texte alternatif" />

Je n'entrave pas grand chose aux expressions régulière et encore moins à la syntaxe à base de \\x de la chaine de remplacement des fonctions ereg_replace ou preg_replace.

Si quelqu'un peut m'apporter ses lumières je lui en serait reconnaissant

Merci d'avance
A voir également:

5 réponses

G_ZOR
 
Bonjour Guewini,

Voila avec le PCRE "preg_replace" :

$texte est la chaine à traiter.

$texte_final = preg_replace('`\[img=\'(.+)\'\](.+)\[ /img\]`', '<img src="$1" alt="$2" />', $texte);
1
guewini
 
Merci beaucoup, effectivement ca marche :D il s'agit maintenant que je comprenne pourquoi xD

Si je comprends bien les antislashs échappent les crochets (qui sont utilisés dans les expressions régulières) mais je ne comprend pas trop l'utilisation de l'accent grave (altgr + 7)
0
guewini
 
Heu et encore une petite question :
Par quoi faut-il que je remplace le .+ pour qu'en cas d'absence de texte alternatif ([img='url_img'][ /img]) cela marche encore ?
0
G_ZOR
 
Re,

Alors l'accent grave c'est le délimiteur, il est libre mais ce ne doit pas être un métacaractère sinion il y aura le joli message d'erreur 'No ending delimiter found' ou 'Delimiter must be not alphanumeric or backslash'

Pour que cela fonction sans text alternatif, il faut utiliser ça :
preg_replace('`\[img=\'(.+)\'\](.+|)\[ /img\]`', '<img src="$1" alt="$2" />', $texte);

(.+|) au lieu de (.+) et dans ce cas la valeur de alt est nulle.

Pour plus d'informations sur les regex : http://www.expreg.com/index.php
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
guewini
 
OK merci ^^ topic résolu :D
0