我正在使用此模式删除所有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片段,
所以,我希望解决方案有正则表达式
答案 0 :(得分:3)
你可以使用否定前瞻
来执行此操作"<(?!(?:a|/a|img)\\b).*?>"
然而,这有很多问题,如果你想要一个强大的解决方案,我建议你使用HTML解析器。
有关详细信息,请参阅此问题:
答案 1 :(得分:0)
查看http://sourceforge.net/projects/regexcreator/。这是非常方便的gui正则表达式编辑器。
答案 2 :(得分:0)
喂!这是你的答案:
答案 3 :(得分:0)
使用正确的HTML解析器,例如htmlparser,Jericho或validator.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>