【发布时间】:2015-09-16 22:32:52
【问题描述】:
我想从 HTML 字符串中删除所有内容(标签之间)。 有没有一种优雅的方法可以在不编写复杂的正则表达式的情况下做到这一点?
如果你愿意,我实际上是在寻找 strip_tags() 所做的相反。
建议?
【问题讨论】:
我想从 HTML 字符串中删除所有内容(标签之间)。 有没有一种优雅的方法可以在不编写复杂的正则表达式的情况下做到这一点?
如果你愿意,我实际上是在寻找 strip_tags() 所做的相反。
建议?
【问题讨论】:
此解决方案使用正则表达式。我会让你决定它是否复杂。
$out = preg_replace("/(?<=^|>).*?(?=<|$)/s", "", $in);
让我们分解一下:
(?<=^|>):回顾一下。实际上并不匹配,但它仍然必须存在。匹配字符串开头 (^) 或文字 >。.*?:匹配任何内容(s 修饰符使其包含换行符)。问号使它变得懒惰 - 它匹配尽可能少的字符。(?=<|$):前瞻。匹配文字 < 或字符串结尾 ($)。这被空("")替换,因此> 和< 之间的所有内容都被删除。可以看到一个工作演示here。它不保留空格,因此您最终会得到一个超长的行。
编辑:如果您知道您的输入将始终包含在 HTML 标记中,您可以自己简化它,因为您不必考虑字符串的开头和结尾位:
$out = preg_replace("/>.*?</s", "><", $in);
此变体不适用于开头或结尾的文本输入 - 例如 Hello <b>World</b>! 将变为 Hello<b></b>!。
【讨论】: