2012-04-21 3 views
0

Я хочу знать, как извлечь имя домена из URLКак извлечь имя домена из URL с помощью PHP

У меня есть данные в HTML-файле:

<a href='http://google.com.site.com'>google.com</a><br /><a href='http://youtube.com.site.com'>youtube.com</a><br /> 

я могу получить полные гиперссылка через

preg_match_all ("/a[\s]+[^>]*?href[\s]?=[\s\"\']+". 
        "(.*?)[\"\']+.*?>"."([^<]+|.*?)?<\/a>/", 
        $var, &$matches); 

    $matches = $matches[1]; 
    $list = array(); 
sort($matches); 

Но я хочу извлечь google.com и youtube.com, который находится между <a> and </a> тегами.
Итак, как я могу извлечь google.com и youtube.com?

+2

все вопросы принимаются .... извини я не знал об этой функции ... но от теперь я буду принимать ответы – user114500

ответ

0

Если вы счастливы просто сопоставить текст ссылки, это регулярное выражение работает.

>(.*?)</a> 

Если вы хотите, чтобы разобрать фактический URL, вы можете попытаться игнорировать все после того, как некоторые приняли такие строки, как «ком», «чистый» и «орг». Это может стать довольно сложной мыслью. Вы хотите совместить имя хоста или что?

Что касается вашего примера «youtube.com.site.com» смотрите: http://en.wikipedia.org/wiki/Domain_name#Domain_name_syntax

Если у вас есть легкий доступ к URL, проверьте также parse_url функцию РНР.


Обновление. Вот регулярное выражение для соответствия URL-адресу после href=, за которым следует одиночная или двойная кавычка. После этого он должен быть простым в использовании parse_url()

<a href=['|"](.*?)?['|"]> 

Update2. Пробел - проблема. Я не смог сделать изящное решение, но он заботится о <br />. Я уверен, что есть более эффективное решение. Я вернусь, если найду его.

$s = '<a href='http://google.com.site.com'>google.com</a><br /><a href='http://youtube.com.site.com'>youtube.com</a><br /><a href='http://youtube.com.site.com'>extratube.com</a>'; 

$pattern = '#>(.*?)</a>(<br />)*#'; 
preg_match_all($pattern, $s, $result); 
var_dump($result); 
+0

> (. *?) это регулярное выражение не работает :( – user114500

+0

@ user114500 Проверьте, работает ли мой обновленный ответ. В массиве массивов второй массив выводит текст между тегами'a '. наименее работает для m е. –

0

я написать свое собственное регулярное выражение после прохождения через много проблем

<a[^>]*>(.*?)<\/a> 

это работает

Смежные вопросы