[英]Trying to replace <br>, <BR>, <br +attribute> tags with <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/>
,而不管转换之前标签中的任何属性。
为了达到此目的,我需要在正则表达式中添加什么?
您可能希望<br\\b[^>]*>
匹配所有符合以下条件的标签
<br
开始 <br
后面加上一个分词符(例如,您将不匹配<brown>
标记 >
字符,包括0 >
结尾 您必须使用.*
而不是*
:
htmlString.replaceAll("(?i)<br .*>", "<br/>")
//-----------------------------^^
因为:
*
匹配前一个字符或子表达式0次或更多次。
和
.*
匹配任何字符零或多次
因此,对于您的情况:
String htmlString = "<BR style=\"PAGE-BREAK-BEFORE: always\" clear=all>";
System.out.println(htmlString.replaceAll("(?i)<br .*>", "<br/>"));
产量
<br/>
此正则表达式将执行您想要的操作: <(BR|br)[^>]*>
这是一个工作示例: Regex101
使用正则表达式解析HTML不是一个好主意,因为HTML不是正则。 您应该使用像NekoHTML这样的适当的解析库。
NekoHTML是一个简单的HTML扫描器和标签平衡器,使应用程序程序员可以解析HTML文档并使用标准XML接口访问信息。 解析器可以扫描HTML文件并“修复”人类(和计算机)作者在编写HTML文档时犯的许多常见错误。 NekoHTML添加缺少的父元素; 自动关闭带有可选结束标签的元素; 并可以处理不匹配的内联元素标签。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.