在PHP中删除HTML标记之间的内容?

时间:2015-08-17 18:03:02

标签: php html dom

我想从HTML字符串中删除所有内容(标记之间)。 如果没有编写复杂的正则表达式,有没有一种优雅的方法呢?

如果您愿意,我实际上正在寻找strip_tags()所做的相反的

建议?

1 个答案:

答案 0 :(得分:7)

此解决方案使用正则表达式。我会让你决定它是否复杂。

$out = preg_replace("/(?<=^|>).*?(?=<|$)/s", "", $in);

让我们分解一下:

  • (?<=^|>):一个向后看。实际上没有匹配,但它仍然必须在那里。匹配字符串的开头(^)或文字的>
  • .*?:匹配任何内容(s修饰符使其包含换行符)。问号使它变得懒惰 - 它匹配尽可能少的字符。
  • (?=<|$):前瞻。匹配文字<或字符串结尾($)。

这被替换为任何内容(""),以便删除><之间的所有内容。可以看到一个工作演示here。它不会保留空格,所以你最终得到一条超长线。

编辑:如果您知道您的输入将始终包含在HTML标签中,您可以让自己更简单,因为您不必考虑字符串的开头和结尾位:

$out = preg_replace("/>.*?</s", "><", $in);

此变体不适用于在开头或结尾包含文字的输入 - 例如Hello <b>World</b>!将变为Hello<b></b>!