解析Domain / hostName的字符串

时间:2012-05-24 09:58:32

标签: c# .net parsing url dns

客户可以从域名输入网站。他们也可以从他们的联系人那里进入mailadresses。

知道我们需要找到哪些网站的whoose域可以与mailadresses的域相关联。

所以我的想法是从webadress和url中提取主机并进行比较

那么从url获取主机名的最可靠算法是什么?

例如主机可以是:

foo.com
www.foo.com
http://foo.com
https://foo.com
https://www.foo.com

结果应该始终是foo.com

4 个答案:

答案 0 :(得分:12)

而不是依靠不可靠的正则表达式使用System.Uri来为您进行解析。使用这样的代码:

string uriStr = "www.foo.com";
if (!uriStr.Contains(Uri.SchemeDelimiter)) {
    uriStr = string.Concat(Uri.UriSchemeHttp, Uri.SchemeDelimiter, uriStr);
}
Uri uri = new Uri(uriStr);
string domain = uri.Host; // will return www.foo.com

现在只想获得您可以使用的顶级域名:

string tld = uri.GetLeftPart( UriPartial.Authority ); // will return foo.com

答案 1 :(得分:1)

这是一个与您提供的网址相匹配的正则表达式。基本上http和https等是可选的,因为www Everything随后匹配到可能的路径;

var expression = /(https?:\/\/)?(www\.)?([^\/]*)(\/.*)?$/;

这意味着;

var result = 'https://www.foo.com.vu/blah'.replace(expression, '$3')

评估为

result === 'foo.com.vu'

答案 2 :(得分:1)

c#中已有一个url解析器用于提取此信息

以下是一些示例http://www.stev.org/post/2011/06/27/C-HowTo-Parse-a-URL.aspx

答案 3 :(得分:0)

查看此网址。与权威机构不同,主机属性不包括端口号。

http://msdn.microsoft.com/en-us/library/system.uri.host(v=vs.110).aspx