2013-04-27 51 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