删除链接以外的所有HTML标记

时间:2008-09-04 16:04:58

标签: html regex actionscript-3 string tags

我正在尝试编写一个正则表达式来删除除链接(<a href</a>标记之外的所有HTML。它不一定是100%安全的(我不担心关于注入攻击或任何因为我正在解析已经批准并发布到SWF电影中的内容。

我正在使用的原始“strip tags”正则表达式为<(.|\n)+?>,我尝试将其修改为<([^a]|\n)+?>,但这当然会允许任何带有 a的标记在其中,而不是在开头有空格的那个,有空格。

并不是说它真的很重要,但如果有人想知道我正在ActionScript 3.0写一部Flash电影。

6 个答案:

答案 0 :(得分:26)

<(?!\/?a(?=>|\s.*>))\/?.*?>

试试这个。有类似的p标签。为他们工作,所以不明白为什么不。使用负前瞻来检查它是否与(前缀为可选/字符)不匹配(使用正向前瞻)a(带有可选/前缀)后跟一个&gt;或者空格,东西然后&gt;。然后匹配到下一个&gt;字符。把它放在带

的子中
s/<(?!\/?a(?=>|\s.*>))\/?.*?>//g;

这应该只留下打开和关闭标签

答案 1 :(得分:1)

我继续谈论它,但我无法经常推荐regexr。这对于测试这类事物非常棒。

答案 2 :(得分:1)

一般来说,这种方法存在问题。正则表达式最适合“平面”文本匹配 - 嵌套数据将正则表达式引擎推送到未设计它们的区域。一般的HTML解析需要解析器而不是正则表达式引擎(如果您需要完整的技术细节,Google需要使用常规语言和无上下文语言之间的区别)。

通过将/&lt; /和/&gt; /替换为空字符串或其实体等价物来删除所有标记很容易,但使用正则表达式选择性地过滤HTML将容易受到各种意外或恶意输入的破坏

答案 3 :(得分:0)

你走了:

{<(?!i|b|h[1-6]|/i|/b|/h[1-6][\s|>|/])[^>]*>}

答案 4 :(得分:-1)

怎么样

<[^a](.|\n)+?>

答案 5 :(得分:-2)

strip_tags()这样做。

在这里,我包含所有<a><p><font><b><i><sup>标签并输出整理版本:

cat input.htm | tr -d '\n' | php -r '$input=fgets(STDIN); echo strip_tags($input,"<a><p><font><b><i><sup>");' | tidy -i -wrap 0 -o output.htm