2016-04-12 62 views
-2

我需要從鏈接中提取域或第一級子域名與正則表達式提取域或子域PHP

www.google.com -> google.com 
www.maps.google.com -> maps.google.com 
www.dev.maps.google.com - > maps.google.com 
www.dev.maps.google.com/show/maps - > maps.google.com 

我知道該怎麼做只提取域名,但我掙扎寫一個表達式會檢測是否有子域名,並且只能得到第一個子域名 有人能告訴我正確的表達嗎?

+1

你有任何示例代碼? –

+4

技術上'www'仍然是'google.com'的子域名。因此,「www.google.com」將評估爲「www.google.com」。 –

+0

切斷www可能更爲明智。 preg替換前 –

回答

0

我不能想出一個正則表達式來做你想做的事情,但是因爲這個問題只是用php標記的,這裏有一些php代碼可以做你想做的事情。

此代碼將拆分您輸入「」,提取的最後部分的TLD和而忽略了可能的‘www’的部分從分裂串移一切都交給3個元素。最後,它將結合剩餘的最多3個部分,這可以爲您提供您想要的域,並且可能只有一個子域。

<?php 
$domain = 'www.dev.maps.google.com/asd/fgh'; 
$parts = explode('.', $domain); 

// extract tld 
preg_match('/([a-z]+)[^a-z]/', $parts[count($parts)-1], $tldMatches); 
$parts[count($parts)-1] = (isset($tldMatches[1])) 
    ? $tldMatches[1] 
    : $parts[count($parts)-1]; 

// remove www if present 
if ('www' === $parts[0]) { 
    array_shift($parts); 
} 

// define how many parts we have to ignore 
$splitHere = (count($parts) > 3) 
    ? count($parts) - 3 
    : 0; 

// output the desired parts combined with "." 
echo implode('.', array_slice($parts, $splitHere)) . PHP_EOL; 

此代碼不適用於變音域名。

0

通常不建議使用基於正則表達式的方法來操作url字符串。業務的第一步是準備parse_url()的字符串,那麼你將有一個堅實的基礎從頭開始。我使用explode()和數組函數來提取所需的結果。

代碼:(Demo

$array=['google.com', // -> google.com 
     'www.google.com', // -> google.com 
     'www.maps.google.com', // -> maps.google.com 
     'www.dev.maps.google.com', // - > maps.google.com 
     'www.dev.maps.google.com/show/maps', // - > maps.google.com 
     'www.dev.maps.google.com?key=value', // - > maps.google.com 
]; 

foreach($array as $url){ 
    $host=parse_url("http://$url")['host'];  // reliable way to isolate host component only 
    $bits=explode('.',$host);      // split string on dots 
    if($bits[0]==='www'){       // check for www in first element 
     unset($bits[0]);       // remove first element 
    } 
    echo implode('.',array_slice($bits,-3)),"\n"; // extract maximum of 3 elements from end, rejoin with dots 
} 

輸出:

google.com 
google.com 
maps.google.com 
maps.google.com 
maps.google.com 
maps.google.com 

此代碼不寫入驗證輸入字符串作爲一個有效的URL。它假定你將有效的域名提供給它。如果你知道,那麼在www.之後移動的唯一子字符串將是dev.,那麼可以更直接地寫出一種方法。