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, les accolades servent de quantificateur.
    Et il faut utiliser des délimiteurs dans ton expression d'où l'erreur que tu as.
    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
      1. Peut être en mettant :
        $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. ha oui
            ben quelquechose comme ca alors :
            $html=eregi_replace("(<a(.*)</a>)?", "", $html);
            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. 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. 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.
                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 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 !
                4. Oui j'ai choisi la seconde.
                  Merci pour ces explications :)
                  Elles vont m'être très utiles!
                  Bonne après-midi