我想从HTML字符串中删除所有内容(标记之间).如果没有编写复杂的正则表达式,有没有一种优雅的方法呢?
如果你愿意,我实际上正在寻找与之相反的东西strip_tags().
建议?
此解决方案使用正则表达式.我会让你决定它是否复杂.
$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>!.
| 归档时间: |
|
| 查看次数: |
2528 次 |
| 最近记录: |