我正在使用一个数据库,其条目包含自动生成的html链接:每个URL都转换为
<a href="URL">URL</a>
我想撤消这些链接:新软件将动态生成链接。 Java中是否有一种方法可以使用.replaceAll或Regex方法来替换仅使用URL的片段(仅适用于URL匹配的情况)?
根据以下问题澄清:现有条目将包含一个或多个链接URL实例。只显示一个例子:
I visited <a href="http://www.amazon.com/">http://www.amazon.com/</a> to buy a book.
应替换为
I visited http://www.amazon.com/ to buy a book.
如果href中的URL与链接文本有任何不同,则不应进行替换。
答案 0 :(得分:1)
您可以将此模式与replaceAll方法一起使用:
<a (?>[^h>]++|\Bh|h(?!ref\b))*href\s*=\s*["']?(http://)?([^\s"']++)["']?[^>]*>\s*+(?:http://)?\2\s*+<\/a\s*+>
replacement: $1$2
我将模式编写为原始模式,因此,在使用之前不要忘记使用双引号并使用双反斜杠。
这种模式的主要兴趣是在没有子串http://
的情况下比较网址以获得更多结果。
答案 1 :(得分:0)
首先,提醒一下正则表达式不适合解析XML / HTML:这个HTML应该解析与你所拥有的相同,但是为它编写正则表达式真的很难:
<
a
foo="bar"
href="URL">
<nothing/>URL
</a
>
这就是为什么我们说“不要使用正则表达式解析XML!”
但它通常是一个很好的捷径。您正在寻找的是反向引用:
<a href="([^"]+)">\1</a>
当引用的字符串和a元素的内容相同时,这将匹配。 \1
匹配组1中捕获的任何内容。如果您希望在正则表达式中添加更多文档,也可以使用命名捕获组。有关更多选项,请参阅Pattern。