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

gae*_*ete 5 html php dom

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

如果你愿意,我实际上正在寻找与之相反的东西strip_tags().

建议?

And*_*ers 7

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

$out = preg_replace("/(?<=^|>).*?(?=<|$)/s", "", $in);
Run Code Online (Sandbox Code Playgroud)

让我们分解一下:

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

这是通过什么(更换""),所以之间的一切>,并<已被删除.这里可以看到一个工作演示.它不会保留空格,因此您最终会得到一条超长线.

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

$out = preg_replace("/>.*?</s", "><", $in);
Run Code Online (Sandbox Code Playgroud)

此变体不适用于在开头或结尾处带有文本的输入 - 例如Hello <b>World</b>!将变为Hello<b></b>!.