将文本与Java中的正则表达式链接

7 java regex

我在Java webapp中有一个所见即所得的文本区域.用户可以输入文本并对其进行样式设置或粘贴一些已经HTML格式的文本.

我想要做的是链接文本.这意味着,将文本中所有可能的URL转换为"工作对应",即添加<a href ="..."> ... </ a>.

当我只有纯文本时,此解决方案有效:

String r = "http(s)?://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&amp;\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?";
Pattern pattern = Pattern.compile(r, Pattern.DOTALL | Pattern.UNIX_LINES | Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(comment);
comment = matcher.replaceAll("<a href=\"$0\">$0</a>"); // group 0 is the whole expression
Run Code Online (Sandbox Code Playgroud)

但问题是当有一些已经格式化的文本时,即它已经有<a href ="..."> ... </ a>标签.

因此,当我在两个HTML标记(<a>)之间找到文本时,我正在寻找一种不匹配的模式.我已阅读本可以实现前瞻回顾后,但我仍然不能使它发挥作用.我确信我做错了因为正则表达式仍然匹配.是的,我一直在玩/调试组,将$ 0改为$ 1等.

有任何想法吗?

Kee*_*ter 9

你很亲密 您可以像这样使用"负面后观":

(?<!href=")http:// etc
Run Code Online (Sandbox Code Playgroud)

以href开头的所有结果都将被忽略.