PRIG_REPLACE删除内容中的注释文本

时间:2013-10-22 作者:Chameron

在帖子内容中,我插入如下文本

 abc acb acb acb
<!--REMOVE--> text to remove <!--ENDREMOVE-->
 abc acb acb acb
 abc acb acb acb
<!--REMOVE--> text to remove <!--ENDREMOVE-->
 abc acb acb acb
 abc acb acb acb
<!--REMOVE--> text to remove <!--ENDREMOVE-->
 abc acb acb acb
我只想得到

abc acb acb acb
abc acb acb acb
abc acb acb acb
abc acb acb acb
abc acb acb acb
abc acb acb acb
我运行这个代码

 function remove($content){
    preg_match_all("/<!--REMOVE-->.*<!--ENDREMOVE-->/", $content, $matches);
    var_dump($matches);
    $content= preg_replace("/<!--REMOVE-->.*<!--ENDREMOVE-->/", \'\', $content);

    return $content;
 }
 add_filter(\'the_content\', \'remove\', 1);
但它不起作用。问题是什么?

上述代码的实际结果是

abc acb acb acb
abc acb acb acb
var\\u dump是一个结果,而不是三个结果

array
    0 => <!--REMOVE--> text to remove <!--ENDREMOVE-->
         abc acb acb acb
         abc acb acb acb
         <!--REMOVE--> text to remove <!--ENDREMOVE-->
         abc acb acb acb
         abc acb acb acb
         <!--REMOVE--> text to remove <!--ENDREMOVE-->
正确的方法是

array
   0 => <!--REMOVE--> text to remove <!--ENDREMOVE-->

   1 => <!--REMOVE--> text to remove <!--ENDREMOVE-->

   2 => <!--REMOVE--> text to remove <!--ENDREMOVE-->

1 个回复
最合适的回答,由SO网友:Charles Clarkson 整理而成

您的代码存在以下问题:

$conten = preg_replace("/<!--REMOVE-->.*<!--ENDREMOVE-->/", \'\', $content);
$conten 已分配,但$content 已返回。

function remove( $content ) {
    return preg_replace( \'/<!--REMOVE-->.*<!--ENDREMOVE-->/\', \'\', $content );
}
问题编辑后:

上述代码的实际结果是

abc acb acb acb
abc acb acb acb
.* 是贪婪的。它查找到最后一个的所有匹配项<!--ENDREMOVE-->.

.*? 他并不贪婪。它会找到第一个之前的所有匹配项<!--ENDREMOVE-->.

使用此功能:

function remove( $content ) {
    return preg_replace( \'/<!--REMOVE-->.*?<!--ENDREMOVE-->/\', \'\', $content );
}

结束

相关推荐