使用Java和Regex撤消自动链接

时间:2013-11-11 15:45:21

标签: java regex

我正在使用一个数据库,其条目包含自动生成的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与链接文本有任何不同,则不应进行替换。

2 个答案:

答案 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