我在字符串中有HTML。我想去掉它的<head>
部分。我使用:
$html = preg_replace("/<head[^>]*?>.*?</head>/s", "", $html);
但就性能而言,这可能有点沉重。还有更好的选择吗?
我知道我可以使用strip_tags()
并在第二个参数中列出所有接受的标记,但太多了,无法列出。
当针对该SO页面的一部分进行测试时,您当前的正则表达式需要6720个步骤。
这个正则表达式<head[^>]*?>(?:[^<]*<??)*</head>
只需要376步,它应该返回相同的内容。它应该比正则表达式快20倍。
它的工作原理是贪婪地匹配这里不是<
的所有内容:[^<]*
然后,由于<??
是惰性的,它将尝试立即匹配</head>
。如果没有匹配,<??
将生效。