[英]Regex for getting domain and subdomain in C#
我需要根据当前的 url 正确获取域/子域。 这是为了正确地从数据库中获取数据并使用正确的参数进一步调用 web api 所必需的。
特别是,我面临本地和生产网址的问题。 例如。
在当地,我有
http://sample.local.example.com
http://test.dev.example.com
在生产中,我有
http://client.example.com
http://program.live.example.com
我需要
Subdomain as: sample / test / client / program
Domain as: exmpale
到目前为止,我尝试使用 c# 和以下代码来识别相同的。 它在我本地运行良好,但我相信这会在某个时间点对生产造成问题。 基本上,对于子域,获取第一部分,对于域,获取 ''.com'' 之前的最后一部分
var host = Request.Url.Host;
var domains = host.Split('.');
var subDomain = domains[0];
string mainDomain = string.Empty;
#if DEBUG
mainDomain = domains[2];
#else
mainDomain = domains[1];
#endif
return Tuple.Create(mainDomain, subDomain);
而不是正则表达式,我认为Linq应该帮助你。 尝试:
public static Tuple<string, string> GetDomains(Uri url)
{
var domains = url.Host.Substring(0, url.Host.LastIndexOf(".")).Split('.');
var subDomain = string.Join("/", domains.Take(domains.Length - 1));
var mainDomain = domains.Last();
return Tuple.Create(mainDomain, subDomain);
}
输出"http://program.live.example.com"
example
program/live
这个正则表达式应该适合你:
Match match = Regex.Match(temp, @"http://(\w+)\.?.*\.(\w+).com$");
string subdomain = match.Groups[1].Value;
string domain = match.Groups[2].Value;
http://(\\w+)\\.
匹配1个或多个单词字符作为点之前的组1和http://
.*
匹配任何字符的零个或多个出现
\\.(\\w+).com
在.com
之前和之后匹配1个或多个单词字符作为组2
$
指定字符串的结尾
\\.?
如果在第1组和第2组之间没有任何内容,就像在http://client.example.com
那样,使点可选以捕获大小写
您正在做正确的事情,您可以将域名作为数组中的倒数第二个值。
var host = Request.Url.Host;
var domains = host.Split('.');
string subDomain = domains[0].Split('/')[2];
string mainDomain = domains[domains.Length-2];
return Tuple.Create(mainDomain, subDomain);
如果你想要所有子域,你可以在这里放一个循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.