繁体   English   中英

用于在 C# 中获取域和子域的正则表达式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM