正则表达式:除www之外的每个字母数字子域

时间:2014-02-19 09:40:27

标签: php regex

这是一个很大的正则表达式(php):

((?:[0-9A-z_-]+))

我用它来验证子域名,但我想接受每个子域“www”

如果有字母数字“选择器”,我怎么能这样做?

编辑:最后使用(\b(?!www\b)(?:[0-9A-Za-z_-]+)),感谢Tim和ATS

3 个答案:

答案 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})+$