试图用<br/>替换<br/>,<br/>,<br /attribute=""/>标签

时间:2017-06-02 18:45:42

标签: java regex

我正在尝试将一堆HTML文档转换为XML合规性(通过java方法),并且有很多<br>标记,它们(1)是未闭合的,或者(2)包含属性。出于某种原因,我正在使用的正则表达式不会解决包含属性的标记。这是代码:

htmlString = htmlString.replaceAll("(?i)<br *>", "<br/>");

此代码适用于文档中的所有<br>标记;它用<br/>替换它们。但是,对于像

这样的标签
<BR style="PAGE-BREAK-BEFORE: always" clear=all>

它没有做任何事情。我希望所有br标记都只是<br/>,无论转换前标记中的任何属性如何。

为了达到这个目的,我需要添加到我的正则表达式中?

4 个答案:

答案 0 :(得分:1)

您可能希望<br\b[^>]*>匹配所有

标签
  • <br
  • 开始
  • <br之后进行分词(因此您不会与<brown>代码匹配,例如
  • 包含任意数量的非>字符,包括0
  • >
  • 结尾

答案 1 :(得分:1)

您必须使用.*代替*

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/>

答案 2 :(得分:1)

此正则表达式将按您的要求执行:<(BR|br)[^>]*>

以下是一个工作示例:Regex101

答案 3 :(得分:0)

使用正则表达式解析HTML不是一个好主意,因为HTML不是常规的。您应该使用正确的解析库,如NekoHTML

  

NekoHTML是一个简单的HTML扫描仪和标记平衡器,可以启用   应用程序员解析HTML文档并访问   使用标准XML接口的信息。解析器可以扫描HTML   文件和&#34;修复&#34;人(和计算机)的许多常见错误   作者撰写HTML文档。 NekoHTML添加了缺少的父级   要素;自动关闭带有可选结束标记的元素;和   可以处理不匹配的内联元素标记。