解析域/主机名的字符串

本文关键字:字符串 主机 | 更新日期: 2023-09-27 18:35:06

Out客户可以从域名进入网站。他们还可以从他们的联系人输入邮件地址。

知道我们需要找到哪些网站域名可以与邮件地址的域相关联的客户。

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

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

例如,主机可以是:

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

结果应始终 foo.com

解析域/主机名的字符串

与其依赖不可靠的正则表达式,不如使用 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

这是一个正则表达式,它将与您提供的 url 匹配。 基本上 http 和 https 等是可选的,就像 www 一样 然后一切都匹配到可能的路径;

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

这意味着;

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

将评估为

result === 'foo.com.vu'

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

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

请参阅此网址。 与颁发机构不同,Host 属性将不包括端口号。

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