这是一个很大的正则表达式(php):
((?:[0-9A-z_-]+))
我用它来验证子域名,但我想接受每个子域除“www”
如果有字母数字“选择器”,我怎么能这样做?
编辑:最后使用(\b(?!www\b)(?:[0-9A-Za-z_-]+))
,感谢Tim和ATS
答案 0 :(得分:3)
首先,正则表达式不正确,它应该是((?:[0-9A-Za-z_-]+))
(或简称为([\w-]+)
- 非必需的非捕获组)。 <{1}}和Z
之间有一些您不想匹配的字符。
其次,使用negative lookahead assertion确保您匹配的字符串不是a
。为确保我们不仅仅从www
获取子匹配ww
(或未能匹配www
),可能需要添加word boundary anchors,具体取决于上下文:
wwwwwhat.sgoing.on
答案 1 :(得分:2)
试试这个:
((?!www)(?:[0-9A-Za-z_-]+))
这使用负向前瞻来说“不是www”。
这假定正则表达式的其余部分(正如您所写,它是更大表达式的一部分)确保此部分包含只是可能的子域。因此,此部分应匹配子域的所有,但不应检查它是否与所有子域匹配。
我仍然需要做的是,不能(因为我不知道你在使用什么),在www
之后插入正确的边界检测。可能\b
就足够了。
答案 2 :(得分:0)
这对我来说可以验证子域名。
^([a-z0-9]+([\-a-z0-9]*[a-z0-9]+)?\.){0,}([a-z0-9]+([\-a-z0-9]*[a-z0-9]+)?){1,63}(\.[a-z0-9]{2,7})+$