2017-08-14 74 views
0

我想使用Java正則表達式來匹配網址的域名,例如,www.table.google.com的 ,我想從網址中獲取'google' ,即這個URL字符串中的第二個單詞。Java正則表達式來匹配網址域

任何幫助將不勝感激!

+0

怎麼樣'google.co.nz','google.com.au','goo.gl'? – Isaac

+0

如果你已經知道你需要從「倒數第二個字」中得到字符串,那麼你可以使用一些util函數的String來獲取它。使用'lastIndexOf(「。」)'刪除零件'。com'然後再次使用它來獲得部分'谷歌' –

+0

這取決於你的輸入的複雜性...這是一個非常簡單的正則表達式:'。+ \\。(。+)\\ .. +',這裏是該模式的一些示例:https://regex101.com/r/L52oz6/1。但爲什麼重新發明輪子,有很多非常好的庫可以正確解析任何複雜的url。但是,當然,對於簡單的輸入,一個小的正則表達式很容易構建。 – Zabuza

回答

1

這真的取決於你的輸入複雜......

這是一個非常簡單的正則表達式:

.+\\.(.+)\\..+ 

它獲取的東西在裏面圓點\\.

以下是該模式的一些示例:https://regex101.com/r/L52oz6/1。如您所見,它適用於簡單的輸入,但不適用於複雜的網址。

但爲什麼重新發明輪子,有很多真正好的庫可以正確解析任何複雜的網址。但是,當然,對於簡單的輸入,一個小的正則表達式很容易構建。所以,如果這不能解決你的輸入問題,那麼請回調,然後我將調整正則表達式模式。


請注意,您也可以只用簡單的拆分,如:

String[] elements = input.split("\\."); 
String secondToLastElement = elements[elements.length - 2]; 

但是不要忘了索引邊界檢查。


或者,如果您尋找一個非常快速的解決方案,而不是從最後一個位置開始輸入。一路摸索,直到找到第一個點,繼續找到第二個點。然後用input.substring(index1, index2);提取該部分。

也有一個完全用於此目的的委託方法,即String#lastIndexOf(請參閱documentation)。

在此代碼段請看:

String input = ... 
int indexLastDot = input.lastIndexOf('.'); 
int indexSecondToLastDot = input.lastIndexOf('.', indexLastDot); 
String secondToLastWord = input.substring(indexLastDot, indexSecondToLastDot); 

可能邊界是關閉的1,沒有測試的代碼,但你的想法。另外不要忘記綁定檢查。

這種方法的優點是速度非常快,它可以直接在String的內部結構上工作而無需創建副本。

0
private static final Pattern URL_MATCH_GET_SECOND_AND_LAST = 
     Pattern.compile("www.(.*)//.google.(.*)", Pattern.CASE_INSENSITIVE); 

String sURL = "www.table.google.com"; 

if (URL_MATCH_GET_SECOND_AND_LAST.matcher(sURL).find()){ 

    Matcher matchURL = URL_MATCH_GET_SECOND_AND_LAST .matcher(sURL); 

    if (matchURL .find()) { 
     String sFirst = matchURL.group(1); 
     String sSecond= matchURL.group(2); 
    } 
} 
1

我嘗試:

(?<scheme>https?:\/\/)?(?<subdomain>\S*?)(?<domainword>[^.\s]+)(?<tld>\.[a-z]+|\.[a-z]{2,3}\.[a-z]{2,3})(?=\/|$) 

Demo。適用於:

http://www.foo.stackoverflow.com 
http://www.stackoverflow.com 
http://www.stackoverflow.com/ 
http://stackoverflow.com 
https://www.stackoverflow.com 
www.stackoverflow.com 
stackoverflow.com 
http://www.stackoverflow.com 
http://www.stackoverflow.co.uk 
foo.www.stackoverflow.com 
foo.www.stackoverflow.co.uk 
foo.www.stackoverflow.co.uk/a/b/c