我正在尝试将一堆HTML文档转换成符合XML的标准(通过java方法),并且有许多<br>标记,它们要么是未关闭的,要么(2)包含属性。由于某些原因,我所使用的regex不寻址包含属性的标记。以下是代码:
htmlString = htmlString.replaceAll("(?i)<br *>", "<br/>");这段代码对于文档中的所有<br>标记都很好;它用<br/>替换它们。但是,对于这样的标记
<BR style="PAGE-BREAK-BEFORE: always" clear=all>它什么也做不了。我希望所有的br标记都是<br/>,而不考虑转换之前标签中的任何属性。
为了实现这一点,我需要在regex中添加什么?
发布于 2017-06-02 18:53:58
这个regex会做你想做的事:<(BR|br)[^>]*>
下面是一个有用的示例:Regex101
发布于 2017-06-02 18:51:22
您可能希望<br\b[^>]*>匹配以下所有标记
<br开始<br之后有一个单词中断(例如,您将不匹配一个<brown>标记)>字符,包括0。>结束发布于 2017-06-02 18:52:42
您必须使用.*而不是*:
htmlString.replaceAll("(?i)<br .*>", "<br/>")
//-----------------------------^^因为:
*匹配前面的字符或子表达式0次或多次。
和
.*匹配任意字符0或多次。
所以对于你的案子:
String htmlString = "<BR style=\"PAGE-BREAK-BEFORE: always\" clear=all>";
System.out.println(htmlString.replaceAll("(?i)<br .*>", "<br/>"));输出
<br/>https://stackoverflow.com/questions/44335554
复制相似问题