Вытащить все внешние ссылки с сайта

Статус
В этой теме нельзя размещать новые ответы.

HatoL

Профессор
Регистрация
5 Фев 2008
Сообщения
206
Реакции
36
Есть следующий кусок кода (на PHP:(
PHP:
$host = str_replace('.', '\.', $this->url_host_simple);
$this->links_ext_num = preg_match_all('/<a.*?href="(http:\/\/(?:www\.)?(?!' . $host . ').+?)"/i', $this->page_content, $this->links_ext);
Все работает почти безупречно. Но в результат попадают также внутренние ссылки ресурса, начинающиеся на "www.". Например "http://site.ru/" не попадет в результат, а "http://www.site.ru/" - да. Переменная $this->url_host_simple содержит адрес хоста без префикса "www." в начале. Всю голову переломал, тысячу раз разбирал заново регу, но вижу, что все должно работать! На вас последняя надежда, nulled.ws.
 
Нужно проверку делать
через strpos.
логика проста до ужаса, если нашло подстроку в строке, то это внутреняя ссылка, а если не нашло то это внешняя

 
думаешь один такой умный? Мне нужно решение именно регулярным выражением.
 
Просто поправить- ...(?:www\.)?+(?!' . $host...
А вообще регулярка аццтой, я бы подругому написал.
 
Например, с такой строкой совпадет
HTML:
<a href="http://site.ru/ht">ссылка1</a> pohohref="http://notsite.ru/"
Ибо <a.*?href
Не говоря уже о том что не учитывается возможность кавычек '...' пробелов между =, и тем более то что некоторые вообще кавычек не ставят.
 
кавычки учесть вот так можно
PHP:
preg_match_all('/<a.*?href=[\'|\"]{0,1}(http:\/\/(?:www\.)?(?!' . $host . ').+?)[\'|\"]{0,1}/is', $this->page_content, $this->links_ext);

a.*?href поменять на a[^>]+href

а pohohref - это слишком ихмо....:)
 
Попробуйте это ;)
PHP:
// получение всех внешних ссылок сайта 
function get_external_links($array){  
    $result = array();  
    $count = count($array);  
        for($i=0;$i<$count;$i++){  
            if(!empty($array[$i])){         
                if(strpos($array[$i],"www",0) !== false){  
                    if(strpos($array[$i],"http",0) !== false){                     
                        array_push($result,$array[$i]);  
                    }  
                }  
            }  
        }  
    return $result;  
}
 
я уже давно все сделал :)
кавычки учесть вот так можно
PHP:
preg_match_all('/<a.*?href=[\'|\"]{0,1}(http:\/\/(?:www\.)?(?!' . $host . ').+?)[\'|\"]{0,1}/is', $this->page_content, $this->links_ext);

a.*?href поменять на a[^>]+href

а pohohref - это слишком ихмо....:)
вместо [\'|\"] имхо лучше написать [\"\'] - так будет меньше нагрузки на парсер Perl-регулярных выражений (на официальном сайте так написано). Остальную часть реги не смотрел
 
Подскажите как реализовать что бы внутрение ссылки выдирать
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху