Eregi_replace("<a(.*)>", "&qu

Bonjour,
Grâce à
$html=eregi_replace("<a(.*)>", "", $html); //$html est de la forme <table><tr><td><a....></a>...
je tente de remplacer la balise "<a border=... toto=....>" par ""
Le problème c'est que dès que la fonction trouve le 1er "<a", elle remplace tous le reste de la chaine par "" vu que mon tableau finit pas "</table>" donc par ">"
Quelqu'un a une idée? :s
Merci d'avance
Configuration: Windows XP
Firefox 3.0.10

11 réponses

  1. Oui j'ai choisi la seconde.
    Merci pour ces explications :)
    Elles vont m'être très utiles!
    Bonne après-midi
    1. Oui, les accolades servent de quantificateur.
      Et il faut utiliser des délimiteurs dans ton expression d'où l'erreur que tu as.
      1. Merci infiniment ça marche! :)

        par contre est ce que je pourrais avoir quelques explications sur la syntaxte du premier paramètre stp?

        Merci encore et bonne journée
        1. Tu as choisi la seconde syntaxe ?
          Les crochets délimitent un groupe, l'accent circonflexe exprime la négation. Donc tu as un groupe qui regroupe tous les caractères sauf '>'. L'étoile indique une répétition 0 à n fois.

          Les accolades permettent de définir une quantité, rien à voir donc avec ce que tu voulais, désolé pour la boulette !
      2. Oui j'adapterai si cela ne fonctionne pas
        Par contre, quand je lance le script, j'ai le message :

        Warning: preg_replace() [function.preg-replace]: Unknown modifier '}'

        Je n'ai pas trouvé d'équivalent pour cette fonction
        1. Utilise des crochets à la place des accolades, je me suis pitet planté...
      3. Merci pour ta réponse,
        J'ai essayé le 1er mais ça ne marche pas vu qu'il y a "?>" dans l'expression régulière.
        J'ai essayé le 2d également, mais ça n'a aucun effet sur ma chaîne...
        J'ai un peu de mal à comprendre
        1. Essaie d'utiliser preg_replace au lieu de ereg_replace... Par contre, je ne crois pas qu'il y ait une version case insensitive, il faudra adapter si ça pose problème.
      4. Fais plutôt :
        $html = eregi_replace( '<a.*?>', '', $html );
        ou
        $html = eregi_replace( '<a{^>}*>', '', $html );
        Les deux reviennent au même et indiquent que tu dois consommer tous les caractères sauf >.
        1. J'ai toujours le même problème, ça me remplace :

          <a ....>...</a>
          </th>
          <th>
          <a ....> ...</gras></a></gras>

          au lieu de chaque :

          <a ....>...</a>
          1. ha oui
            ben quelquechose comme ca alors :
            $html=eregi_replace("(<a(.*)</a>)?", "", $html);
            1. Je n'y avais pas pensé merci
              Mais maintenant le problème c'est qu'il s'arête au dernier </a> car en fait c'est un tableau de la forme :
              <table>
              <tr>
              <th>
              <a ....>...</a>
              </th>
              <th>
              <a ....> ...</a>
              </th>
              ...

              Je voudrais juste qu'il supprime l'intérieur de la balise et non du 1er <a> au dernier </a> trouvé... :(
              Merci pour ton aide
              1. Peut être en mettant :
                $html=eregi_replace("<a(.*)</a>", "", $html);
                1. Je reformule ma question de façon plus claire :
                  J'ai une chaine :
                  $str="<p><a .......>XXXXXX</a></p>"

                  Je veux remplacer "<a .......>" par "" (rien), et je n'arrive pas avec eregi_replace()...
                  Encore merci d'avance pour votre aide