java试图用<br/>替换<br>、<br>、<br+属性>标记
我正在尝试将大量HTML文档转换为XML遵从性(通过java方法),并且有许多<br>
标记(1)未关闭或(2)包含属性。出于某种原因,我使用的正则表达式没有处理包含属性的标记。代码如下:
htmlString = htmlString.replaceAll("(?i)<br *>", "<br/>");
此代码适用于文档中的所有<br>
标记;它将它们替换为<br/>
。但是,对于像
<BR style="PAGE-BREAK-BEFORE: always" clear=all>
它没有任何作用。我希望所有br标记都是<br/>
,而不考虑转换之前标记中的任何属性
为了实现这一点,我需要在正则表达式中添加什么
# 1 楼答案
你必须使用
.*
而不是*
:因为:
及
所以对于你的情况:
输出
# 2 楼答案
这个正则表达式将执行您想要的操作:
<(BR|br)[^>]*>
下面是一个工作示例:Regex101
# 3 楼答案
您可能希望
<br\b[^>]*>
匹配所有<br
开始<br
后面有一个分词符(例如,这样你就不会匹配<brown>
标记)>
字符,包括0>
结尾# 4 楼答案
使用正则表达式解析HTML不是一个好主意,因为HTML不是正则表达式。应该使用适当的解析库,如NekoHTML