2013-03-08 34 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