2012-03-22 123 views
0

任何人都可以建议如何改善下面的正则表达式,以轻松转换纯文本超链接到java超链接在java中?如何将纯文本超链接转换为java中的超链接?

message = message.replaceAll("(?:https?|http?)://[\\w/%.\\-?&=!#]+(?!.*\\[/)", 
"$0"); 

其实我想知道是否有可能只是检查是否只是转换与HTTP或HTTPS一起发现与追加文本的任何文本没有间距,而不是检查那些特殊字符。

我看到一些网站textareas,可以很容易地将纯文本超链接转换为html超链接。但我一直在研究stackoverflow,并没有真正找到任何关于这个问题的完整答案。

我希望Java常规表达式能够自动检测链接并将它们转换为可点击的html超链接。

|http://naishe.blogspot.com| 
|http://tw.com/#!/someTEXTs| 
|http://ts123t1.rapi.com/#!download|13321|1313|fairy_tale.mp4| 
|http://www.google.com| 
|https://www.google.com| 
|google.com| 
|google.com| 
|google.com/test| 
|123.com/test| 
|ex-ample.com| 
|http://ex-ample.com/test-url_chars?param1=val1&;par2=val+with%20spaces| 
https://www.google.com.sg/#hl=en&output=search&sclient=psy-ab&q=test&oq=&aq=&aqi=&aql=&gs_sm=&gs_upl=&gs_l=&psj=1&fp=1&biw=1366&bih=638&bav=on.2,or.r_ gc.r_pw.r_qf.,cf.osb&cad=b 
+0

管道('|')是链路定义的一部分吗?如果不是的话,任何程序应该如何知道“google.com”将是一个链接而不仅仅是一些文本,例如一个关键左右? - 你把这些转换成html链接意味着什么?你的意思是'http://www.google.com - >http://www.google.com'?如果是这样,除了检测链接还有问题在哪里? – Thomas 2012-03-22 15:24:15

+0

好吧,例如考虑我的问题中的代码文本。它们可以是用户输入的文本的一部分。意思是以http或https开头的文本内容应自动转换为 html格式的超链接。 – dfdf 2012-03-22 15:31:02

回答

3

假设http://www.google.com应当认定为一个链接,但www.google.com没有,你可以使用这样的事情:

String htmlLink = link.replaceAll("(?:https|http)://([\\w/%.\\-?&=!#]+(?!.*\\[/))", 
            "<a href=\"$0\">$1</a>"); 

输出:

http://www.google.com -> <a href="http://www.google.com">www.google.com</a> 
www.google.com -> www.google.com 

编辑

这可能是可能的为了简化这样表达的东西:

String pattern = "(?:https|http)://([^\\s\\|]+)"; 

这个表达式将会匹配任何以httphttps其次是://开始,那是不是空白或管道的一个或多个字符的序列。如果还有其他字符不应该被允许(我没有检查它们的规范),只需在括号内(在[^]]之间)列出它们。

+0

可以解释你的正则表达式是如何工作的? – dfdf 2012-03-22 15:51:02

+0

@dfdf基本上你的'''在'https'和'http'之后被移除,并且在'://'部分(因此'$ 1')之后还有一个额外的捕获组。 – Thomas 2012-03-22 15:54:06