包含换行符的PHP preg_replace html标记

时间:2016-04-02 16:46:33

标签: php regex preg-replace

我尝试使用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/进行测试。

非常感谢你的帮助!

2 个答案:

答案 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匹配。这就是你如何做到的。