我想知道是否有人可以帮助我使用 C# 中的正则表达式。我认为这很简单,但我一直在绞尽脑汁,不太清楚为什么我会遇到这么困难。 :)
我发现了一些例子,但我似乎无法操纵它们来做我需要的事情。
我只需要匹配任何不是“www”的字母数字+破折号子域字符串,直到“.”。
另外,理想情况下,如果有人输入“www.subdomain.domain.com”,我希望尽可能忽略 www。如果没有,这不是一个大问题。
换句话说,我想匹配:
-
(test).domain.com
-
(test2).domain.com
-
(wwwasdf).domain.com
-
(asdfwww).domain.com
-
(w).domain.com
-
(wwwwww).domain.com
-
(asfd-12345-www-香蕉).domain.com
- www.(子域).domain.com
我不想匹配:
在我看来,这应该很容易,但我在“不匹配”部分遇到了麻烦。
就其价值而言,这是用于 IIS 7 URL 重写模块,以重写所有非 www 子域。
Thanks!
域名的其余部分是常量吗,例如.domain.com
,如您的示例所示?尝试这个:
\b(?!www\.)(\w+(?:-\w+)*)(?=\.domain\.com\b)
解释:
\w+(?:-\w+)*
匹配您所描述的通用域名组件(但更严格一点)。
(?=\.domain\.com\b)
确保它是第一个子域(即实际域名之前的最后一个子域)。
\b(?!www\.)
确保它不是www.
(没有\b
,它可以跳过第一个w
并仅匹配ww.
).
在我的测试中,这个正则表达式与您在示例中突出显示的部分完全匹配,并且确实not匹配www.
在最后两个示例中的任何一个中。
编辑:这是与整个名称匹配的另一个版本,捕获不同组中的片段:
^((?:\w+(?:-\w+)*\.)*)((?!www\.)\w+(?:-\w+)*)(\.domain\.com)$
大多数情况下,组$1
将包含一个空字符串,因为子域名之前没有任何内容,但它是如何分解的www.subdomain.domain.com
:
$1: "www."
$2: "subdomain"
$3: ".domain.com"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)