如何保持指定的HTML标记

时间:2010-09-24 09:14:00

标签: java regex

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

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

System.out.println(html);

现在,我想保留标记<a ...>(使用</a>)并标记<img ...>

我希望结果是:

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

怎么做?


我不需要HTML解析器来执行此操作,

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

所以,我希望解决方案有正则表达式

5 个答案:

答案 0 :(得分:3)

可以使用否定前瞻

来执行此操作
"<(?!(?:a|/a|img)\\b).*?>"

Rubular

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

有关详细信息,请参阅此问题:

答案 1 :(得分:0)

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

答案 2 :(得分:0)

喂!这是你的答案:

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

答案 3 :(得分:0)

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

如果你坚持使用正则表达式,你几乎肯定会犯一些小错误,导致破坏,并可能导致跨站点脚本攻击,这取决于你对标记的处理方式。

另见this answer

答案 4 :(得分:-1)

我建议你使用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>