我在字符串中有HTML。我想剥离它的<head>
部分。我用:
$html = preg_replace("/<head[^>]*?>.*?<\/head>/s", "", $html);
但就性能而言,这可能有点沉重。还有更好的选择吗?
我知道我可以使用strip_tags()
并在第二个参数中列出所有接受的标签,但列出的内容太多了。
答案 0 :(得分:0)
当针对此SO页面的一部分进行测试时,您当前的正则表达式需要6720步。
这个正则表达式<div class="col-lg-4 col-lg-offset-2 wow zoomIn animated" style="visibility: visible; animation-name: zoomIn;">
只需要376步,它应该返回相同的东西。它应该比你的正则表达式快近20倍。
通过贪婪地匹配这里不是<head[^>]*?>(?:[^<]*<??)*</head>
的所有内容来工作:<
然后,由于[^<]*
是懒惰的,它会尝试立即匹配<??
。如果没有匹配,则</head>
开始。