2010-08-09 12 views
19

Co chcęPHP REGEX: Get domeny z URL


Chcę dostać z URL na domain części tak od http://example.com/ ->example.com

Przykłady:


+----------------------------------------------+-----------------------+ 
| input          | output    | 
+----------------------------------------------+-----------------------+ 
| http://www.stackoverflow.com/questions/ask | www.stackoverflow.com | 
| http://validator.w3.org/check    | validator.w3.org  | 
| http://www.google.com/?q=hello    | www.google.com  | 
| http://google.de/?q=hello     | google.de    | 
+----------------------------------------------+-----------------------+ 

Znalazłem kilka powiązanych pytań w stackoverflow, ale żaden z nich nie był dokładnie tym, czego szukałem.

Dzięki za pomoc!

+0

Ten kod pomoże Ci uzyskać pełną nazwę domeny: https://gist.github.com/praisedpk/64bdb80d28144aa78d58469324432277 –

Odpowiedz

69

Nie ma potrzeby stosowania w tym celu wyrażenia regularnego. PHP ma wbudowaną funkcję, aby to zrobić. Użyj parse_url():

$domain = parse_url($url, PHP_URL_HOST); 
+1

Zrobiłeś magicznego człowieka. Dałem świetne rozwiązanie. –

+1

to dobrze, tylko jeśli zawiera http (s), a nie "stackoverflow.com/questions" – ewwink

+1

to da ci również subdomeny. Uważaj, ponieważ 'parse_url ('http://example.com', PHP_URL_HOST) == parse_url ('http://www.example.com', PHP_URL_HOST)' zwróci false –

0

Oto moje szybkie i brudne rozwiązanie.

http://([^/]+).*

nie testowałem, ale powinno chwycić coś pomiędzy http:// a pierwszą kreską.

+1

Co powiesz na domeny z http: // www. – User

1

Zakłada, że ​​http:// prefiksuje wszystko.

$tmp = explode("/", $url); 
$domain = $tmp[2]; 
+0

hej, najbardziej nieszablonowe rozwiązanie :-) – gnud

0
if (preg_match('/http:\/\/([^\/]+)\//i', $target_string, $matches)) { 
    $domain = $matches[1]; 
} 
1
$tmp = parse_url($url); 
$url = $tmp['host'] 
1

To jest jak regex from theraccoonbear ale ze wsparciem dla domen HTTPS.

if (preg_match('/https?:\/\/([^\/]+)\//i', $target_string, $matches)) { 
    $domain = $matches[1]; 
} 
0

Najlepszy sposób myślę:

preg_match('/(http(|s)):\/\/(.*?)\//si', 'http://www.example.com/page/?bla=123#[email protected]#$%^&*()_+', $output); 
// $output[0] ------------> https://www.example.com/ 
2

używam:

$domain = parse_url('http://' . str_replace(array('https://', 'http://'), '', $url), PHP_URL_HOST); 

Ponieważ parse_url nie zwraca klucza hosta, gdy schemat brakuje w $url.