2014-01-23 91 views
0

我有方法可以返回我的字符串數組的鏈接,但這項工作只有在鏈接有「HTTP」或「WWW」前綴(如http:// site.com或WWW .site.com)。同時還需要檢測不帶前綴鏈接僅僅site.com 請幫我修改正則表達式來檢測所有的URL鏈接

ArrayList retrieveLinks(String text) { 
ArrayList links = new ArrayList(); 

String regex = "\\(?\\b(http://|https://|www[.])[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]"; 
Pattern p = Pattern.compile(regex); 
Matcher m = p.matcher(text); 
while(m.find()) { 
String urlStr = m.group(); 
char[] stringArray1 = urlStr.toCharArray(); 

if (urlStr.startsWith("(") && urlStr.endsWith(")")) 
{ 

    char[] stringArray = urlStr.toCharArray(); 

    char[] newArray = new char[stringArray.length-2]; 
    System.arraycopy(stringArray, 1, newArray, 0, stringArray.length-2); 
    urlStr = new String(newArray); 
    // System.out.println("Finally Url ="+newArray.toString()); 

} 
//System.out.println("...Url..."+urlStr); 
links.add(urlStr); 
} 
return links; 
} 

回答

0

不評論的源代碼

其餘做前綴可選,採用了?後聲明可能的前綴的組。

String regex = "\\(?\\b(http://|https://|www[.])?[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]"; 

查看現場測試here

+0

這整個正則表達式實在是模糊的,前綴可能是從一個隨機字符串區分的URL的唯一的事...... OP你可能希望先對正則表達式的其餘部分工作(你可以在網上找到一些樣品已經爲URL驗證,常見問題)。此外,'http:// | https://'確實只是'https?://'。 – Robin