从特定代码中剥离字符串的最快捷方式是什么

时间:2016-04-19 11:00:24

标签: php regex

我在字符串中有HTML。我想剥离它的<head>部分。我用:

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

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

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

1 个答案:

答案 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>开始。