2013-03-08 54 views
3

我不明白這一點更換整個DIV如何與另一在PHP的preg_replace替換一個div如何與其他用了preg_replace正則表達式

$string =' 
    <div id="myid">this has to be replaced</div> 
    <p>here is something</p> 
    <div id="any">any text not to be replaced</div> 
'; 

,如果我做

$string = preg_replace('/<div id=\"myid\">.*<\/div>/','anything',$string); 

它不起作用,我不明白爲什麼?!

+1

因爲量詞默認爲貪婪。看看http://www.regular-expressions.info/repeat.html。更好的是:使用HTML解析器和DOM操作來做你想做的事情。 – 2013-03-08 14:00:10

+0

它適用於我。 – Pitchinnate 2013-03-08 14:03:17

回答

3

由於您的regexis working fine我懷疑您沒有將preg_replace的返回值分配給任何變量。

$string = preg_replace('/<div id=\"myid\">.*<\/div>/','anything',$string); 

應該工作。


後您編輯您的問題:

如前所述@Felix Kling.*是貪婪的,這意味着它匹配的一切,直到最後一場比賽。您可以使用非貪婪量詞(即.*?)。以下should work

$string = preg_replace('/<div id=\"myid\">.*?<\/div>/','anything',$string); 
+0

我確實用過它。 – Viktor 2013-03-08 14:08:00

+0

嗯,在RegExr上它可以工作,但我的PHP腳本確實只返回一個空白字符串。 – Viktor 2013-03-08 14:13:10

+0

f ** ck!我確實忘記了分隔符,謝謝! – Viktor 2013-03-08 14:28:11