2017-03-16 198 views
0

提取單個值。如果我執行以下步驟:從的preg_match()PHP

preg_match('/[a-z]+.[a-z]+$', $_SERVER['HTTP_HOST'], $domain); 

$SERVER['HTTP_HOST'] = subdomain.mydomain.compreg_match()將創建一個包含所有的匹配,在此情況下一個數組$domain$domain = ["mydomain.com"]

我想要的結果是$domain = "mydomain.com"


我的問題是,是有沒有更優雅的方式來做到這一點比:

preg_match('/[a-z]+.[a-z]+$', $_SERVER['HTTP_HOST'], $domain); 
$domain = $domain[0]; 
+0

'的preg_match '不返回所有匹配的數組,它只是匹配一次(這與'preg_match_all()'的區別。該陣列用於捕獲組。 – Barmar

+0

唯一的選擇是'list($ domain)= $ domain;' – Barmar

+0

我不會認爲inelegant.its代碼,而不是藝術,這是他們的工作,不看起來漂亮 – nogad

回答

1

我不知道這是否是更優雅與否,但它是一個小更直接:

$arr = [ 
    'subdomain.mydomain.com', 
    'mydomain.com', 
    'subdo.subdomain.mydomain.com' 
]; 

foreach ($arr as $item) { 
    echo preg_replace('~(?:.*\.)?(?=.*\.)~', '', $item), PHP_EOL; 
} 

demo