我有以下可能的输入:
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
答案 0 :(得分:2)
^(https?://)?((?<subdomain>[^\.]+)\.)?(?<domain>[^\./]+\.[^/]+)/?.*$
使用显式捕获。
答案 1 :(得分:1)
使用System.Uri(http://www.dotnetperls.com/uri)至少减少一些手工作业
现在你可以做到:
var regex = new Regex(@"^((?<subdomain>.+?)\.)*(?<domain>[^\.]*)$");
针对Host
或DnsSafeHost
属性。请注意,我的正则表达式具有捕获零个或多个级别的子域名的额外好处,以防他们感兴趣
答案 2 :(得分:0)
您可以像这样强制使用3个部分:
^(?:https?://)?([^/.]+(?=\.)|)\.?([^/.]+\.[^/]+)/?(.+|)$
的修改
或^(?:https?://)?((?:[^/.]+(?=\.)\.?)*|)([^/.]+\.[^/.]+)/?(.+|)$
获取所有单个组中的子域名(包括点,因此可能需要拆分)。
作为旁注,我忘记了.Net做了一个Group对象,其中(?<name> something)*
将捕获一个'name'数组。所以,请使用它来获得适当的解决方案(@sehe或@qtax等)
在位置上,订单被强制执行:
$ 1 =子域
$ 2 =域
3美元=其余
唯一需要的部分是域名。