2010-12-01 84 views
0

嘿,我很好奇如何解析在C#中使用正則表達式的URL中的主機名。正則表達式從C#中的URL解析主機名?

我有以下的正則表達式:

Regex regexUrl = new Regex("://(?<host>([a-z\\d][-a-z\\d]*[a-z\\d]\\.)*[a-z][-a-z\\d]+[a-z])"); 

但是當URL不包含「HTTP://」,它拋出一個錯誤「 WWW」,而且它也沒有分析出部分網址。

那麼,我將如何編碼一個函數,即從URL解析出「hostname.com」,即使它不包含「http://」。謝謝:)

回答

3

我不會使用正則表達式。

  1. 轉換的 'http://' 爲 ''(空字符串)在你的字符串 - 基本上消除HTTP://如果它的存在
  2. Split的串/作爲數組
  3. 的主機名在指數0
3

爲什麼不這樣做somethiing呢?

Uri uri; 
if (!Uri.TryCreate(s, UriKind.Absolute, out uri)) { 
    if (!Uri.TryCreate("http://" + s, UriKind.Absolute, out uri)) { 
     throw new ArgumentException(); 
    } 
} 

return uri.Host; 

這是更多的線條,但它可能比正則表達式更容易閱讀。

+0

這不工作的時候供應「TESTSERVER:666」。 URI的主機將是未知的。如果(!Uri.TryCreate(「http://Uri.TryCreate(uri.TryCreate(uri.TryCreate,」uri.HostNameType == UriHostNameType.Unknown)),您應該更正您的示例,如下所示: – 2011-09-21 08:30:20

-1

[^\/\.\s]+\.[^\/\.\s]+\/元素 - 唯一的問題是它需要/主機名

0

後,如果您堅持使用正則表達式本應該做的:^([a-z]+://)?(?<host>[a-z\d][a-z\d-]*(\.[a-z\d][a-z\d-]*)*)[/$]

訣竅是讓最後一個字符匹配無論是/或終止($