$test = "<div><b><i>#uniquetag#</b></i></div> <div>Keep this</div>";
$test = preg_replace("/<div(.*)#uniquetag#(.*)<\/div>/i", "#uniquetag#", $test);
Je veux que le résultat soitPHP preg_replace - Expression régulière ne comprenant pas une phrase
$test = "#uniquetag# <div>Keep this</div>";
Mais il retourne
$test = "#uniquetag#";
Je pense que je sais pourquoi. (. *) est gourmand et il étend la recherche jusqu'à la fin. Mais je ne peux pas comprendre quelle est la bonne façon de le faire.
Mise à jour:
grâce à ghostdog74 spéciales. Vieux problème résolu. Un nouveau problème est connu ....
$test = "<div></div> <div><b><i>#uniquetag#</b></i></div> <div>Keep this</div>";
$test = preg_replace("/<div(.*)#uniquetag#(.*?)<\/div>/i", "#uniquetag#", $test);
résultat attendu est
$test = "<div></div> #uniquetag# <div>Keep this</div>";
Mais il se révèle être
$test = "#uniquetag# <div>Keep this</div>";
Encore une fois, je crois que c'est à cause de la première (. ). Le changer à (.?) N'aidera pas aussi. Besoin de penser à un moyen d'exclure.
Cela fonctionne, mais je fais face à un autre problème. S'il y a une balise div avant ce code, elle engloutira tous les divs avant elle. –
montrez votre exemple dans votre question et votre résultat attendu – ghostdog74