Regexp remplacement de chaîne dans certains cas

WRInaute accro
Voilà je cherche à faire la chose suivante : supprimer dans une chaine toute occurence d'un couple de balise et leur contenu par une chaine vide.

Du genre

<debut><test><div>test</div></test></debut>

deviendrait

<debut></debut>

J'utilise la regexp suivante :

Code:
$zone_html_modifiee = preg_replace("#(<test>)(.*)(</test>)#", "", $zone_html_modifiee);

Mais ca ne fonctionne pas.

Une idée ?
 
WRInaute discret
salut

Ta REGEX marche bien pour le bout de code que tu indique ...

Code:
<?php
$zone_html_modifiee = '<debut><test><div>test</div></test></debut> ';
$zone_html_modifiee = preg_replace("#<test>(.*)</test>#", "", $zone_html_modifiee); 

// affiche bien <debut></debut>
echo htmlspecialchars($zone_html_modifiee);
?>

Apres, évidemment, si tu as plusieurs fois cette occurence dans ta chaîne de départ, il faut interdire la gourmandise naturelle des REGEX dans ton masque de recherche :

Code:
<?php
$zone_html_modifiee = '<debut><test><div>test</div></test></debut> ';
$zone_html_modifiee = preg_replace("#<test>(.*?)</test>#", "", $zone_html_modifiee); 
echo htmlspecialchars($zone_html_modifiee);
?>

Note le ?, qui interdit la gourmandise au coup par coup, sinon tu peux également utiliser l'option ##U, qui s'appliquera au masque entier.

edit : les parenthèses sur <test> sont inutiles

fab
 
Discussions similaires
Haut