2017-03-16 256 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