正则表达式将子域和域解析为单独的组

时间:2011-11-14 23:44:18

标签: c# regex

我有以下可能的输入:

http://subdomain.domain.com/hello.html
http://subdomain.domain.com
https://subdomain.domain.com
subdomain.domain.com
http://domain.com/hello.html
http://domain.com
https://domain.com
domain.com

我正在尝试创建一个正则表达式,该表达式将捕获并子域名转换为一个组,并将域转换为另一个组。因此,鉴于以上示例,我将得到以下匹配项:

Sub Domain Group    Domain Group
--------------------------------
subdomain           domain.com
subdomain           domain.com
subdomain           domain.com
subdomain           domain.com
empty               domain.com
empty               domain.com    
empty               domain.com
empty               domain.com

3 个答案:

答案 0 :(得分:2)

^(https?://)?((?<subdomain>[^\.]+)\.)?(?<domain>[^\./]+\.[^/]+)/?.*$

使用显式捕获。

答案 1 :(得分:1)

使用System.Uri(http://www.dotnetperls.com/uri)至少减少一些手工作业

现在你可以做到:

var regex = new Regex(@"^((?<subdomain>.+?)\.)*(?<domain>[^\.]*)$");

针对HostDnsSafeHost属性。请注意,我的正则表达式具有捕获零个或多个级别的子域名的额外好处,以防他们感兴趣

答案 2 :(得分:0)

您可以像这样强制使用3个部分:

^(?:https?://)?([^/.]+(?=\.)|)\.?([^/.]+\.[^/]+)/?(.+|)$
修改
^(?:https?://)?((?:[^/.]+(?=\.)\.?)*|)([^/.]+\.[^/.]+)/?(.+|)$获取所有单个组中的子域名(包括点,因此可能需要拆分)。
作为旁注,我忘记了.Net做了一个Group对象,其中(?<name> something)*将捕获一个'name'数组。所以,请使用它来获得适当的解决方案(@sehe或@qtax等)

在位置上,订单被强制执行:
$ 1 =子域
$ 2 =域
3美元=其余

唯一需要的部分是域名。