【问题标题】:How to keep the HTML tags specified如何保持指定的 HTML 标记
【发布时间】:2010-09-24 09:14:00
【问题描述】:

我正在使用此模式删除所有 HTML 标记(Java 代码):

String html="text <a href=#>link</a> <b>b</b> pic<img src=#>";
html=html.replaceAll("\\<.*?\\>", "");

System.out.println(html);

现在,我想保留标签&lt;a ...&gt;(带有&lt;/a&gt;)和标签&lt;img ...&gt;

我希望结果是:

text <a href=#>link</a> b pic<img src=#>

如何做到这一点?


我不需要 HTML 解析器来做这个,

因为我需要这个正则表达式模式来过滤大量的 html 片段,

所以,我想要正则表达式的解决方案

【问题讨论】:

  • 这可能不是重点,但您拥有的 HTML 示例是无效的 - 您也可以从它搞砸 SO 的语法突出显示的事实中看出这一点......
  • 它们完全有效。 HTML 不需要在属性值周围加上引号,也不需要作者关闭 img 标记(以及其他标记)。

标签: java regex


【解决方案1】:

可以使用否定的前瞻来做到这一点:

"<(?!(?:a|/a|img)\\b).*?>"

Rubular

但是,这有很多问题,如果您想要一个强大的解决方案,我建议您使用 HTML 解析器。

有关更多信息,请参阅此问题:

【讨论】:

  • 谢谢,我尝试了html=html.replaceAll("&lt;(?!(?:a|/a|img)\b).*?&gt;", ""); 的模式,但没有任何反应
  • 在 Java 中,您需要转义反斜杠。我已经纠正了我的帖子。
  • 如果你要运行这么多次,我建议你预编译 Pattern: private static final Pattern regex = Pattern.compile("")
【解决方案2】:

看看这个http://sourceforge.net/projects/regexcreator/。这是非常方便的 gui 正则表达式编辑器。

【讨论】:

  • 谢谢,我可以运行这个编辑器,但我不知道如何为我的问题创建正则表达式模式,我的正则表达式很烂。
【解决方案3】:

嘿!这是你的答案:

You can’t parse [X]HTML with regex.

【讨论】:

  • 嗯。你可以。我同意这是个坏主意。
【解决方案4】:

使用适当的 HTML 解析器,例如 htmlparserJerichovalidator.nu HTML parser。然后使用解析器的 API、SAX 或 DOM 提取您感兴趣的内容。

如果您坚持使用正则表达式,您几乎肯定会犯一些小错误,从而导致损坏,并可能导致跨站点脚本攻击,具体取决于您对标记所做的操作。

另见this answer

【讨论】:

    【解决方案5】:

    我推荐你使用 strip_tags(一个 PHP 函数)

    string strip_tags ( string $str [, string $allowable_tags ] )
    
        <?php
    $text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
    echo strip_tags($text);
    echo "\n";
    
    // Allow <p> and <a>
    echo strip_tags($text, '<p><a>');
    ?>
    

    输出

    Test paragraph. Other text
    <p>Test paragraph.</p> <a href="#fragment">Other text</a>
    

    【讨论】:

    • 当它是一个 java 问题时,他将如何使用 php 函数?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 2020-04-11
    相关资源
    最近更新 更多