繁体   English   中英

使用C#正则表达式来解析域名?

[英]Using a C# regex to parse a domain name?

我需要从字符串中解析域名。 字符串可以变化,我需要确切的域。

字符串示例:

http://somename.de/
www.somename.de/
somename.de/
somename.de/somesubdirectory
www.somename.de/?pe=12

如果适用的话,我只需要域名, tldwww就可以使用以下格式:

www.somename.de

我如何使用C#做到这一点?

作为正则表达式解决方案的替代方法,您可以让System.Uri类为您解析字符串。 您只需确保该字符串包含一个方案。

string uriString = "http://www.google.com/search";

if (!uriString.Contains(Uri.SchemeDelimiter))
{
    uriString = string.Concat(Uri.UriSchemeHttp, Uri.SchemeDelimiter, uriString);
}

string domain = new Uri(uriString).Host;

此解决方案还会过滤掉任何端口号,并将IPv6地址转换为其规范形式。

我用的很简单

 Uri uri = new Uri("http://www.google.com/search?q=439489");
            string url = uri.Host.ToString();
            return url;

因为通过使用这个你可以肯定。

我查看了正则表达式库 ,看起来像这样的东西可能适合你:

^(([\w][\w\-\.]*)\.)?([\w][\w\-]+)(\.([\w][\w\.]*))?$

尝试这个:

^(?:\w+://)?([^/?]*)

这是一个弱的正则表达式 - 它不验证字符串,但假设它已经是一个url,并获得第一个单词,直到第一个斜杠,而忽略协议。 要让域查看第一个捕获的组,例如:

string url = "http://www.google.com/hello";
Match match = Regex.Match(url, @"^(?:\w+://)?([^/?]*)");
string domain = match.Groups[1].Value;

作为奖励,它还会捕获到第一个? ,所以网址google.com?hello=world将按预期工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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