Java中的正则表达式:转换URL

时间:2015-09-26 15:27:50

标签: java regex url hyperlink

我根据Java中的正则表达式提出了一个问题。我有以下代码来转换相关HTML-Hyperlinks中的URL:

String groupEndOfURL = "[^ \"\\|\\t\\n\\r<]";
dummy = dummy.replaceAll("([\\w]+?://"+groupEndOfURL+"*)","<a href=\"$1\">$1</a>");

这会正确转换以下网址: http://www.vsa-verlag.de/index.php?id=6576&tx_ttnews[tt_news]=15147

但是,在参考BibTex条目之后:

Engelhardt A,Kajetzke L(2010):Handbuch Wissensgesellschaft。 Theorien,Themen und Probleme。比勒费尔德:成绩单[http://www.transcript-verlag.de/978-3-8376-1324-7/handbuch-wissensgesellschaft]

包含超链接中的尾随],这不应该发生(堆栈溢出时似乎存在相同的错误,见上文)。

执行以下操作(添加\\[\\]):

String groupEndOfURL = "[^ \"\\|\\[\\]\\t\\n\\r<]";
dummy = dummy.replaceAll("([\\w]+?://"+groupEndOfURL+"*)","<a href=\"$1\">$1</a>");

未正确转换第一个网址示例,因为超链接在[tt_news]=15147停止。

那么,是否有人知道如何修改我的正则表达式以接受网址中的[],而不是当他们只是“取消”链接时?

使用([\w]+?://[^ "\|\t\n\r<]*)(?=\])?并不完全适合,它包含下方示例中的]

enter image description here

1 个答案:

答案 0 :(得分:0)

刚刚尝试使用原子的正则表达式,它只能正确匹配网址:

example

要让它与两个网址一起使用,只需更改您的正则表达式:

\[([\w]+?://[^ "\|\t\n\r<]*)\]

如果正则表达式引擎支持lookbehind和lookforward,你甚至可以避免两个封闭的方括号成为匹配表达式的一部分:

(?<=\[)([\w]+?://[^ "\|\t\n\r<]*)(?=\])

在评论后更新了正则表达式

([\w]+?://[^ "\|\t\n\r<]*)(?=\])?