我尝试使用preg_replace删除某个html标记,但我找不到任何方法可以执行此操作,如果我删除了换行符但是没有。
到目前为止的正则表达式:
preg_replace("/<ol class=\"comment-list\">.*?<\/ol>/", "", $string);
有问题的字符串:
<ol class="comment-list">
<time datetime="2016-03-25T15:27:34+00:00"></ol>
我正在使用http://www.phpliveregex.com/进行测试。
非常感谢你的帮助!
答案 0 :(得分:1)
我知道这个答案可能不是您想要的,但如果您想尝试,可以使用DOMDocument删除<ol>
个节点:
$dom = new DOMDocument(); // Init DOMDocument object
libxml_use_internal_errors( True ); // Disable libxml errors
$dom->loadHTML( $html ); // Load HTML
$xpath = new DOMXPath( $dom ); // Init DOMXPath (useful for complex queries)
/* Search for all <ol> nodes with class “comment-list”: */
$nodes = $xpath->query( '//ol[@class="comment-list"]' );
/* Remove nodes: */
while( $nodes->length )
{
$nodes->item(0)->parentNode->removeChild( $nodes->item(0) );
}
/* Output modified HTML: */
echo $dom->saveHTML();
是的,这些是7行而不是1行,但我建议你这样做。正则表达式是一项伟大的发明,但不适用于HTML / XML。
答案 1 :(得分:0)
我是否在本页的小评论中说过,@ HamZa的评论实际上是这里唯一有用的信息:将s
修饰符添加到正则表达式中,以便它与新行匹配。< / p>
preg_replace("/<ol class=\"comment-list\">.*?<\/ol>/s", "", $string);
告诉您不应该使用regexp解析(x)HTML是一个很好的建议。但这里的问题非常简单,只是询问如何将换行符与preg_replace匹配。这就是你如何做到的。