2017-04-03 14 views
0

我試圖從一個字符串中提取的URL,這裏是字符串:的Java:無WWW錯誤提取URL從一個String

Hello my name is John. My blog is john.com

我不能提取URL(john.com),因爲它不是包含www

我用下面的表達式從提取的網址:

(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)(?:\([-A-Z0-9+&@#/%=~_|$?!:,.]*\)|[-A-Z0-9+&@#/%=~_|$?!:,.])*(?:\([-A-Z0-9+&@#/%=~_|$?!:,.]*\)|[A-Z0-9+&@#/%=~_|$]) 

,但仍然無法正常工作。

請幫助我如何提取URL加www

注意到: 我曾嘗試在stactoverflow所有類似的問題,但仍然沒有工作

+0

你的正則表達式需要一個WWW或FTP –

+0

我不建議拍攝'john.com'爲URL的字符串可能錯誤地連接句子沒有空格,如'你好,我的名字是John.My博客是john.com。這將在6月底開放供公衆查看。請訪問我的博客。「但是,如果你堅持,你應該使你的www或ftp在你的正則表達式中可選。 – user1506104

回答

0

您可以嘗試使用正則表達式,我在用我的項目

public static List<String> extractUrls(String sms) { 
List<String> containedUrls = new ArrayList<String>(); 
String text = sms; 

// Split the sms to analyze if each part is a URL 
String[] split = text.split(" "); 

Pattern p = Pattern.compile("(@)?(href=')?(HREF=')?(HREF=\")?(href=\")?(http://)?[a-zA-Z_0-9\\-]+(\\.\\w[a-zA-Z_0-9\\-]+)+(/[#&\\n\\-=?\\+\\%/\\.\\w]+)?"); 

// Attempt to convert each item into an URL 
for (int i = 0; i < split.length; i++) { 
    if (p.matcher(split[i]).matches()) containedUrls.add(split[i]); 
} 

return containedUrls; 
}