Проблема заключается в том, что есть очень большие списки «доменов псевдо верхнего уровня», таких как CO.UK, wakayama.jp или edu.cn, или даже «топлессных уровня "с тремя частями. нет Там отсутствует встроенный в списке для всех из них в C#, так что лучшее решение, которое я могу видеть, чтобы указать те, которые вы ожидаете, и отдельные на них, как из ниже:
List<string> parts = null;
Uri uri = new Uri("http://www.xx.yy.co.uk/folder/whatever.html");
string s = uri.Host;
string[] twoLevelDomains = { "co.uk", "edu.cn" };
foreach(var twoLevelDomain in twoLevelDomains)
{
if (s.EndsWith(twoLevelDomain))
{
parts = s.Replace("." + twoLevelDomain, "").Split('.').ToList();
parts.Add(twoLevelDomain);
}
}
if(parts == null) {
parts = s.Split('.').ToList();
}
Справочная информация: только официальные домены верхнего уровня - это всего лишь одна часть, например .uk. Несколько исчерпывающий список всех «доменов верхнего уровня» доступен здесь: https://wiki.mozilla.org/TLD_List. Хотя это большой список, он по-прежнему не кажется исчерпывающим, поскольку многие страны перечислены только с одним верхним доменом, и есть такие поля, как «(другие?)».
Вы хотите, чтобы домен TLD, домен второго уровня и домен третьего уровня? –
@NathanTuggy Я не уверен, что на самом деле они называются, что сделало мой поиск в Google очень тяжелым для этого, но я полагаю, что я ищу их, да – dimitris93
Хорошая сделка. Трюк в основном относится к домену верхнего уровня (TLD), поскольку некоторые TLD имеют встроенные периоды: например, co.uk. –