從URI

2014-10-20 40 views
1

刪除子域我想從一個URI刪除子域名。從URI

例如: 我想從Uri「subdomain.sub2.baseurl.com」返回'baseurl.com'。

是否有這樣做使用URI類方式或者是正則表達式唯一的解決辦法?

謝謝。

+0

技術上在你的榜樣「頂級」是.COM,頂層是.COM的子域,因爲你正在尋找域的這種子集提取幾乎是任意的。 – 2014-10-20 09:08:33

+0

感謝您的意見。我認爲正則表達式因此是唯一的方式去這裏? – badger110 2014-10-20 09:36:17

+1

我認爲正則表達式可能是你最好的選擇。 – 2014-10-20 09:38:01

回答

2

這應該完成它:

var tlds = new List<string>() 
{ 
    //the second- and third-level TLDs you expect go here, set to null if working with single-level TLDs only 
    "co.uk" 
}; 

Uri request = new Uri("http://subdomain.domain.co.uk"); 
string host = request.Host; 
string hostWithoutPrefix = null; 

if (tlds != null) 
{ 
    foreach (var tld in tlds) 
    { 
     Regex regex = new Regex($"(?<=\\.|)\\w+\\.{tld}$"); 
     Match match = regex.Match(host); 


     if (match.Success) 
      hostWithoutPrefix = match.Groups[0].Value; 
    } 
} 

//second/third levels not provided or not found -- try single-level 
if (string.IsNullOrWhiteSpace(hostWithoutPrefix)) 
{ 
    Regex regex = new Regex("(?<=\\.|)\\w+\\.\\w+$"); 
    Match match = regex.Match(host); 


    if (match.Success) 
     hostWithoutPrefix = match.Groups[0].Value; 
} 
+0

@holex這不是OP提出的問題點的一些例子。但是這個代碼可以很容易地修改來做到這一點。 – pimbrouwers 2017-06-02 16:55:56

+0

我一直在指的是你的代碼根本沒有正確刪除子域 - 因此你的代碼是不正確的。 – holex 2017-06-05 09:05:16

+0

@holex。度假時我會回家測試和調整。 – pimbrouwers 2017-06-05 19:39:29

-1

NET不提供內置功能來提取Uri.Host特定部分,因此字符串操作/正則表達式是去這裏的路。

+2

不建設性。 – pimbrouwers 2016-01-22 21:23:00

+1

你可以提供'Regex' – 2017-06-02 10:40:26