2010-08-09 38 views
19

Những gì tôi muốnPHP REGEX: Nhận tên miền từ URL


Tôi muốn nhận được từ một URL phần domain như vậy từ http://example.com/ ->example.com

Ví dụ:


+----------------------------------------------+-----------------------+ 
| 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    | 
+----------------------------------------------+-----------------------+ 

Tôi đã tìm thấy một số câu hỏi liên quan trong số stackoverflow nhưng không có câu hỏi nào trong số đó là chính xác những gì tôi đang tìm kiếm.

Cảm ơn bạn đã trợ giúp!

+0

Mã này sẽ giúp bạn nhận được tên miền hoàn chỉnh: https://gist.github.com/praisedpk/64bdb80d28144aa78d58469324432277 –

Trả lời

69

Không cần sử dụng regex cho việc này. PHP có một chức năng sẵn có để làm điều này. Sử dụng parse_url():

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

Bạn đã làm một người đàn ông phép thuật. Đã đưa ra một giải pháp tuyệt vời. –

+1

chỉ tốt nếu chứa (các) http, không phải cho "stackoverflow.com/questions" – ewwink

+1

điều này cũng sẽ cung cấp cho bạn các tên miền phụ. Hãy cẩn thận vì 'parse_url ('http://example.com', PHP_URL_HOST) == parse_url ('http://www.example.com', PHP_URL_HOST)' sẽ trả về false –

0

Đây là giải pháp nhanh và bẩn của tôi.

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

tôi đã không kiểm tra nó, nhưng nó phải lấy bất cứ điều gì giữa http:// và dấu gạch chéo đầu tiên.

+1

Điều gì về các miền có http: // www. – User

1

Giả sử rằng http:// tiền tố mọi thứ.

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

heh, giải pháp out-of-the-box nhất :-) – gnud

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

này cũng giống như regex from theraccoonbear nhưng với sự hỗ trợ cho các tên miền HTTPS.

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

Cách tốt nhất tôi nghĩ rằng:

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

tôi sử dụng:

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

parse_url không trả lại chìa khóa chủ khi schema là mất tích trong $url.

Các vấn đề liên quan