我想使用Java正則表達式來匹配網址的域名,例如,www.table.google.com的 ,我想從網址中獲取'google' ,即這個URL字符串中的第二個單詞。Java正則表達式來匹配網址域
任何幫助將不勝感激!
我想使用Java正則表達式來匹配網址的域名,例如,www.table.google.com的 ,我想從網址中獲取'google' ,即這個URL字符串中的第二個單詞。Java正則表達式來匹配網址域
任何幫助將不勝感激!
這真的取決於你的輸入複雜......
這是一個非常簡單的正則表達式:
.+\\.(.+)\\..+
它獲取的東西在裏面圓點\\.
。
以下是該模式的一些示例: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
的內部結構上工作而無需創建副本。
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);
}
}
我嘗試:
(?<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
怎麼樣'google.co.nz','google.com.au','goo.gl'? – Isaac
如果你已經知道你需要從「倒數第二個字」中得到字符串,那麼你可以使用一些util函數的String來獲取它。使用'lastIndexOf(「。」)'刪除零件'。com'然後再次使用它來獲得部分'谷歌' –
這取決於你的輸入的複雜性...這是一個非常簡單的正則表達式:'。+ \\。(。+)\\ .. +',這裏是該模式的一些示例:https://regex101.com/r/L52oz6/1。但爲什麼重新發明輪子,有很多非常好的庫可以正確解析任何複雜的url。但是,當然,對於簡單的輸入,一個小的正則表達式很容易構建。 – Zabuza