2013-04-27 44 views
0

问题是以下 - 我想从随机url中获取子域名。reg表达式:获取子域名(如果存在)

  1. 子域可能存在或不(www.domain.com或domain.com)
  2. 我要得到完整的子域名信息

例如,www.somesite.com会得到我,用preg_match

[0] = www.somesite.com 
[1] = www 

同样的阵列,域somesite.com会得到我:

[0] = somesite.com 

(和无[1]将被编入索引)

我使用以下reg_exp:

preg_match('/[www.]?([0-9A-Za-z-]+)'/', $_SERVER['SERVER_NAME'], $array); 

www.somesite.com它让我以与阵列

[0] = www.somesite.com 
[1] = ww (the last w seems to be missing) 

有关如何完成此任务的任何提示?

+3

什么'example.co.uk'的域名? – Gumbo 2013-04-27 18:04:38

+3

您的“子域名”概念没有充分说明。在'example.k12.city.md.us'或'www.news.example.co.uk'哪部分是“sub”?提示:他们完全不同。 – tripleee 2013-04-27 18:13:57

+0

我们可以假设输入是一个格式正确的url吗? – 2013-04-27 19:23:51

回答

3

我没有看过你的完整的regex但正则表达式的这部分肯定有问题:

[www.]? 

方括号内的字符列表只意味着一个匹配。这意味着要么w或点和太随意,因为?

它应该是:

(www\.)? 
+0

请注意''[1]'将始终被编入索引,但可能为空。 – 2013-04-27 18:05:14

+1

这不是最后一个缺失的'w'; '[w。]?'与捕获组外的第一个'w'相匹配,然后该组捕获所有内容直到第一个点之前。 – tripleee 2013-04-27 18:11:19

+0

@tripleee:同意和好点。 – anubhava 2013-04-27 18:14:40

1

小费让你用自己的方式:

^(.+\.|)([^\.]+\.[^\.]+)$ 

应该给你

[0] = www.somesite.com 
[1] = www. 
[2] = somesite.com 

and

[0] = www.another.somesite.com 
[1] = www.another. 
[2] = somesite.com 

[0] = somesite.com 
[1] = 
[2] = somesite.com 
+0

谢谢!将尝试它! – Consolas 2013-04-27 23:07:16