在帖子内容中,我插入如下文本
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-->
最合适的回答,由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 );
}