去除链接以外的所有HTML标签
时间:2020-03-05 18:47:41 来源:igfitidea点击:
我正在尝试编写一个正则表达式以除去链接(分别是<ahref和
</a>`标记)之外的所有HTML。它不必是100%安全的(我不担心注入攻击或者其他任何我正在解析已批准并发布到SWF电影中的内容)。
我使用的原始" strip标签"正则表达式是" <(。| \ n)+?>",我试图将其修改为" <([^ a] | \ n)+?>",但是当然,它会允许其中包含a的任何标签,而不是开头带有空格的任何标签。
并不是说它真的很重要,但是万一有人想知道我是在ActionScript 3.0中为Flash电影编写的。
解决方案
回答
怎么样
<[^a](.|\n)+?>
?
回答
<(?!\/?a(?=>|\s.*>))\/?.*?>
试试这个。 p标签也有类似的东西。为他们工作,所以不明白为什么不这样做。使用否定前瞻来检查它是否不匹配(以一个可选的/字符为前缀),其中(使用肯定的前瞻)一个(带有可选的/前缀)后跟一个>或者一个空格,填充然后是>。然后匹配直到下一个>字符。将此与
s/<(?!\/?a(?=>|\s.*>))\/?.*?>//g;
这应该只留下开始和结束标签
回答
我一直在做下去,但是我无法经常推荐regexr。测试这种类型的东西真是太棒了。
回答
通常,这种方法存在问题。正则表达式最适合"平面"文本匹配,嵌套数据会将正则表达式引擎推入其未设计的区域。常规HTML解析需要解析器而不是正则表达式引擎(如果我们需要完整的技术细节,请使用Google了解常规语言和上下文无关语言的区别)。
通过用空字符串或者它们的实体等效项替换/ </和/> /来剥离所有标签很容易,但是使用正则表达式选择性地筛选HTML将很容易受到各种意外或者恶意输入的破坏。
回答
干得好:
{<(?!i|b|h[1-6]|/i|/b|/h[1-6][\s|>|/])[^>]*>}