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

5 réponses

  1. 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
  2. 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
  3. 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
  4. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question