PHP preg_replace - bir ifade dahil değil Düzenli ifade

2 Cevap php
$test = "<div><b><i>#uniquetag#</b></i></div> <div>Keep this</div>";

$test = preg_replace("/<div(.*)#uniquetag#(.*)<\/div>/i", "#uniquetag#", $test);

Ben sonuç olmak istiyorum

$test = "#uniquetag# <div>Keep this</div>";

Ama döner

$test = "#uniquetag#";

Ben nedenini biliyorum. (. *) Açgözlü olduğunu ve sonuna kadar arama genişletmek. Ama bunu yapmak için doğru yolu ne olduğunu anlamaya olamaz.

Güncelleme:

Ghostdog74 Özel teşekkürler. Eski sorun çözüldü. Yeni bir sorun yaşanıyor ....

$test = "<div></div> <div><b><i>#uniquetag#</b></i></div> <div>Keep this</div>";

$test = preg_replace("/<div(.*)#uniquetag#(.*?)<\/div>/i", "#uniquetag#", $test);

Beklenen sonuç

$test = "<div></div> #uniquetag# <div>Keep this</div>";

Ama çıkıyor

$test = "#uniquetag# <div>Keep this</div>";

Yine, ben çünkü ilk olduğuna inanıyorum (. ). Changing it to (.?) Da yardımcı olmayacaktır. Dışlamak için bir yol düşünmek gerekir.

2 Cevap

değişim (.*) için (.*?)

Vakaların çoğunda ben şiddetle bu bağlantıları almak için bir HTML çözümleyici (örneğin {[) (0]} gibi) kullanmanızı tavsiye ediyorum. HTML ayrıştırmak için normal ifadeler kullanarak HTML düzenli değil çünkü sorunlu olacak ve dikkate almak kenar durumlarda sonu olacak.

here daha fazla bilgi için bkz.