2016-04-06 39 views
0

你能幫我用正則表達式嗎?正則表達式匹配URL與www和沒有連續的點

我行

"Sites www.google.com и www.ridd.rdd..com good." 

解析後,我心中已經得到這個類型的線路:

"Sites http://www.google.com и www.ridd.rdd..com good." 

問題的檢查連續點。 對於有錯誤的站點(連續兩個點)"http//:"不應追加

我的正則表達式:

Matcher matchr = Pattern.compile("w{3}(\\.\\w+)+[a-z]{2,6}").matcher(text); 

     while (matchr.find()) { 
      text = text.replace(matchr.group(0), "http://" + matchr.group(0)); 
     } 

     System.out.println(text); 
+1

http://stackoverflow.com/questions/27745/getting-parts-of-a-url-regex –

+1

Егор,只需在'\\。'後面加'+'。 –

+0

那麼你想添加「http://」到所有的url字符串的開始? – jazibobs

回答

1

你的正則表達式w{3}(\\.\\w+)+[a-z]{2,6}的第二壞 「URL」,www.ridd.rdd ..com一個部分匹配。所以,你需要確保你匹配的子串沒有連續的點。你可以使用單詞邊界和負向預測(?!\S*\.{2})

使用

String text = "Sites www.google.com и www.ridd.rdd..com good."; 
text = text.replaceAll("\\b(?!\\S*\\.{2})w{3}(\\.\\w+)+[a-z]{2,6}\\b", "http://$0"); 
// => Sites http://www.google.com и www.ridd.rdd..com good. 

IDEONE demo

模式說明:

  • \\b - 領先的單詞邊界
  • (?!\\S*\\.{2}) - 不應該有在非空白任何連續點大塊遵循
  • 其次1+ .序列與1+字母或下劃線
  • [a-z]{2,6} - -
  • w{3} - 比賽www
  • (\\.\\w+)+確保有2至6 a-z信...
  • \\b - 在年底這個「單詞」
+0

感謝您的詳細解釋) –

+0

很高興幫助,請考慮接受答案,因爲它爲你工作。 –