1

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

4

2 回答 2

1

您可以将此模式与 replaceAll 方法一起使用:

<a (?>[^h>]++|\Bh|h(?!ref\b))*href\s*=\s*["']?(http://)?([^\s"']++)["']?[^>]*>\s*+(?:http://)?\2\s*+<\/a\s*+>

replacement: $1$2

因此,我将模式编写为原始模式,在使用之前不要忘记转义双引号并使用双反斜杠。

这种模式的主要兴趣是在没有子字符串的情况下比较 urlhttp://以获得更多结果。

于 2013-11-11T16:01:43.270 回答
0

首先,提醒一下正则表达式对于解析 XML/HTML 不是很好:这个 HTML 应该解析出来的和你得到的一样,但是为它写一个正则表达式真的很难:

<
a
foo="bar"
href="URL">


<nothing/>URL
</a
>

这就是为什么我们说“不要使用正则表达式来解析 XML!”

但这通常是一个很好的捷径。您正在寻找的是反向引用

<a href="([^"]+)">\1</a>

当引用的字符串和 a 元素的内容相同时,这将匹配。匹配组 1 中捕获的\1任何内容。如果您喜欢正则表达式中的更多文档,也可以使用命名的捕获组。有关更多选项,请参阅模式

于 2013-11-11T15:55:40.427 回答