【问题标题】:Strip all HTML tags except links去除除链接之外的所有 HTML 标签
【发布时间】:2010-09-07 19:53:26
【问题描述】:

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

我使用的原始“条形标签”正则表达式是<(.|\n)+?>,我尝试将其修改为<([^a]|\n)+?>,但这当然允许任何具有a的标签在它里面,而不是一开始就有它,有一个空格。

这并不重要,但如果有人想知道我在ActionScript 3.0 写这个Flash 电影。

【问题讨论】:

    标签: html regex actionscript-3 string tags


    【解决方案1】:

    怎么样

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

    ?

    【讨论】:

    【解决方案2】:
    <(?!\/?a(?=>|\s.*>))\/?.*?>
    

    试试这个。 p 标签有类似的东西。为他们工作所以不明白为什么不。使用负前瞻来检查它是否不匹配 a(以可选 / 字符为前缀),其中(使用正前瞻)a(带有可选 / 前缀)后跟 > 或空格、填充物然后 >。然后匹配到下一个 > 字符。用

    把它放在一个 subst 中
    s/<(?!\/?a(?=>|\s.*>))\/?.*?>//g;
    

    这应该只留下开始和结束的标签

    【讨论】:

      【解决方案3】:

      我一直在谈论它,但我无法经常推荐regexr。测试这类东西真是太棒了。

      【讨论】:

        【解决方案4】:

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

        通过将 / 和 />/ 替换为空字符串或其实体等效项很容易去除所有标签,但使用正则表达式选择性地过滤 HTML 将容易受到各种意外或恶意输入破坏的影响。

        【讨论】:

          【解决方案5】:

          给你:

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

          【讨论】:

            【解决方案6】:

            strip_tags() 会这样做。

            在这里,我包含了所有&lt;a&gt;&lt;p&gt;&lt;font&gt;&lt;b&gt;&lt;i&gt;&lt;sup&gt; 标签并输出了一个整理后的版本:

            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
            

            【讨论】:

            • 感谢您的回答,但 strip_tags() 是一个 php 函数,问题所有者要求提供一个 actionscript 解决方案。
            猜你喜欢
            • 1970-01-01
            • 2011-09-08
            • 2023-03-10
            • 1970-01-01
            • 2011-05-15
            • 2013-06-26
            • 2019-01-08
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多