$test = "<div><b><i>#uniquetag#</b></i></div> <div>Keep this</div>";
$test = preg_replace("/<div(.*)#uniquetag#(.*)<\/div>/i", "#uniquetag#", $test);
我希望结果是
$test = "#uniquetag# <div>Keep this</div>";
但它返回
$test = "#uniquetag#";
我想我知道为什么。 (。*)贪婪,它将搜索范围扩展到最后。但我无法弄清楚做到这一点的正确方法是什么。
更新
特别感谢ghostdog74。老问题解决了。经历了一个新问题......
$test = "<div></div> <div><b><i>#uniquetag#</b></i></div> <div>Keep this</div>";
$test = preg_replace("/<div(.*)#uniquetag#(.*?)<\/div>/i", "#uniquetag#", $test);
预期结果是
$test = "<div></div> #uniquetag# <div>Keep this</div>";
但事实证明是
$test = "#uniquetag# <div>Keep this</div>";
同样,我相信这是因为第一个(。)。将其更改为(。?)也无济于事。需要考虑一种排除方式。