java正则表达式替换除br之外的所有html标记

时间:2011-11-18 17:45:54

标签: java regex

我需要一个可以与replaceall一起使用的正则表达式来替换所有带有空字符串的html标签,除了br的任何变化以保持换行符。

我找到了以下内容来替换所有的html标签 < \ S * BR \ S * \ [^>]

2 个答案:

答案 0 :(得分:4)

你可能会得到一些声称有用的答案。

这些答案甚至可能适用于您尝试反对的特定情况。

但是要知道正则表达式(我一般都喜欢这种表达方式)在这种情况下是错误的工具。

随着您的项目不断发展并需要覆盖更复杂的HTML输入,正则表达式将变得越来越复杂,并且可能会出现一段时间,它再也无法解决您的问题了。期待。

从一开始就做正确的方法。使用HTML解析器,而不是正则表达式。

供参考,以下是一些相关的SO帖子:

答案 1 :(得分:1)

如果已知HTML有效,那么您可以使用此正则表达式(不区分大小写):

<(?!br\b)/?[a-z]([^"'>]|"[^"]*"|'[^']*')*>

但如果你给它无效的HTML,它会以有趣的方式失败。另外,我非常简单地使用了“HTML标签”;上述内容不会涵盖<!-- HTML comments --><!DOCTYPE declarations>,也不会将<![CDATA[ blocks ]]>&entity;转换为纯文本。

退一步可能会更好,想一想为什么要删除这些HTML标记 - 也就是你实际想要实现的目标 - 然后找到一个HTML处理库,它提供了一个更好的方法实现这一目标。 HTML清理真的是一个解决的问题;你不应该重新发明它。

更新:我刚刚意识到,即使对于有效的HTML,上述内容也存在一些主要限制。例如,它会错误处理<!--<yes-->(仅将其转换为<!--),以及类似<script><foo></script>之类的内容(因为HTML正确包含CDATA的少量标记内容,即开始标记之后的所有内容,直到第一个</被视为字符数据,不包含HTML标记;幸运的是,由于XML缺乏支持,XHTML被迫摆脱这个概念)。当然,这两个限制都可以解决 - 使用更多的正则表达式! - 但它们应该有助于强调你应该使用经过良好测试的HTML处理库,而不是试图推出自己的正则表达式。如果您对要尝试处理的HTML的性质有很多保证,那么正则表达式可能很有用;但是,如果您要做的是删除任意标签,那么这是一个好的迹象,表明您有这些类型的保证。