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
这是一个与您提供的网址匹配的正则表达式。基本上 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