php - 从特定标签中剥离字符串的最快方法是什么

标签 php regex

我有一个字符串中的 HTML。我想剥离 <head>一部分。我使用:

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

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

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

最佳答案

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

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

它通过贪婪地匹配所有不是 < 的东西来工作这里:[^<]*

那么,因为<??是懒惰的,它会尝试立即匹配 </head> .如果没有匹配项,<??开始。

关于php - 从特定标签中剥离字符串的最快方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36716421/

相关文章:

javascript - 如何验证对 PHP 文件的 AJAX 请求?

java - 正则表达式:匹配字符串中两个标签之间的字符串

python - 使用正则表达式列表按正则表达式的顺序过滤字符串列表的最Pythonic方法是什么?

regex - 如何有条件地从 Scala 数据框中的列中的字符串中删除文本?

regex - cl-ppcre:regex-replace 和反斜杠替换

php - 可以让 PHP MYSQL 查询忽略 WHERE 子句中的空变量吗?

php - SimpleXML - 无法获取第一个标记的属性

php - index.php 没有删除 https CodeIgniter

php - 将主题添加到 SENDMAIL.PHP 文件

java - 如何在java中使用正则表达式分割包含数字和字母的字符串