什么';这是从特定标签中提取字符串的最快方法


What's the quickest way to strip a string from a specific tag

我在字符串中有HTML。我想去掉它的<head>部分。我使用:

$html = preg_replace("/<head[^>]*?>.*?<'/head>/s", "", $html);

但就性能而言,这可能有点沉重。还有更好的选择吗?

我知道我可以使用strip_tags()并在第二个参数中列出所有接受的标记,但太多了,无法列出。

当针对该SO页面的一部分进行测试时,您当前的正则表达式需要6720个步骤。

这个正则表达式<head[^>]*?>(?:[^<]*<??)*</head>只需要376步,它应该返回相同的内容。它应该比正则表达式快20倍。

它的工作原理是贪婪地匹配这里不是<的所有内容:[^<]*

然后,由于<??是惰性的,它将尝试立即匹配</head>。如果没有匹配,<??将生效。