我需要一个可以与replaceall一起使用的正则表达式来替换所有带有空字符串的html标签,除了br的任何变化以保持换行符。
我找到了以下内容来替换所有的html标签 < \ S * BR \ S * \ [^>]
答案 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的性质有很多保证,那么正则表达式可能很有用;但是,如果您要做的是删除任意标签,那么这是一个好的迹象,表明您不有这些类型的保证。