寫的一個小工具需要獲取指定URL的頂級域名,就寫了這么個方法:
private static string GetBaseDomain(string host) { List<string> list = new List<string>(".com|.co|.info|.net|.org|.me|.mobi|.us|.biz|.xxx|.ca|.co.jp|.com.cn|.net.cn|.org.cn|.mx|.tv|.ws|.ag|.com.ag|.net.ag|.org.ag|.am|.asia|.at|.be|.com.br|.net.br|.bz|.com.bz|.net.bz|.cc|.com.co|.net.co|.nom.co|.de|.es|.com.es|.nom.es|.org.es|.eu|.fm|.fr|.gs|.in|.co.in|.firm.in|.gen.in|.ind.in|.net.in|.org.in|.it|.jobs|.jp|.ms|.com.mx|.nl|.nu|.co.nz|.net.nz|.org.nz|.se|.tc|.tk|.tw|.com.tw|.idv.tw|.org.tw|.hk|.co.uk|.me.uk|.org.uk|.vg".Split('|')); string[] hs = host.Split(".".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); if (hs.Length > 2) { //傳入的host地址至少有三段 int p2 = host.LastIndexOf('.'); //最后一次“.”出現的位置 int p1 = host.Substring(0, p2).LastIndexOf('.');//倒數第二個“.”出現的位置 string s1 = host.Substring(p1); if (!list.Contains(s1)) return s1.TrimStart('.'); //域名后綴為兩段(有用“.”分隔) if (hs.Length > 3) return host.Substring(host.Substring(0, p1).LastIndexOf('.')); else return host.TrimStart('.'); } else if (hs.Length == 2) { return host.TrimStart('.'); } else { return string.Empty; } }
調用方式(以下代碼中的 url 為實際訪問的網址):
string baseDomain = GetBaseDomain((new Uri(url)).Host);
因為寫的程序是.NET 2.0 的,如果是高版本的話可以把List改為HashSet,效率應該會高一點(雖然基本感覺不出來,但處理上萬行數據的話還是建議用HashSet,效率提升很明顯,元素數量在10個以內的話兩個是基本沒區別的)