Подскажите регулярное выражение (PHP) для получения внешних ссылок со страницы

12
F
На сайте с 12.05.2010
Offline
7
6451

Собственно сабж

Копирайтинг и рерайтинг на разные темы (в частности ФОРЕКС) АНГЛ+РУС
t0os
На сайте с 25.02.2008
Offline
81
#1

Поиск рулит.

I
На сайте с 21.06.2009
Offline
7
iko
#2

<?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;

}

?>

t0os
На сайте с 25.02.2008
Offline
81
#3

Почему $array передается в функцию? :)

Логичнее бы контент страницы. Да и ТС просил регулярку.

[Удален]
#4

iko, абсолютно тупая функция

bearman добавил 01.06.2010 в 20:58

еще и работающая коряво в некоторых случаях

bigton
На сайте с 17.08.2009
Offline
43
#5


<?
/**
* Получение внешних ссылок со страницы
*
* @param html
* @param домен (без www.)
* @return массив внешних ссылок
*
*/
function getoutlinks($content, $domain)
{
$content = preg_replace("/[\n\r\t]/", '', $content); // Заменяем символы перевода строки и табуляции на пробел
$content = preg_replace("/[ ]{2,}/", ' ', $content); // Заменяем более 2х пробелов одним

preg_match_all("/<a[^<>]*href=['|\"](.*)['|\"][^<>]*>(.*)<\/a>/iU", $content, $links); // Собираем ссылки

if (sizeof($links[1]) > 0) // Если ссылки найдены
{
$out = array(); // Массив для внешних ссылок

foreach ($links[1] as $v)
{
if (preg_match("/http:\/\/(www\.){0,1}".$domain."/i", $v)) // Пропускаем внутренние ссылки
{
continue;
}

if (preg_match("/http:\/\/(www\.){0,1}(.*)/i", $v)) // Внешняя ссылка
{
$out[] = $v;
}
}

return $out;
}

return array();
}
[Удален]
#6

о! это случаем не функция великого попова?! :)

bigton
На сайте с 17.08.2009
Offline
43
#7
bearman:
о! это случаем не функция великого попова?! :)

Честно, не знаю :) эту функцию я написал самостоятельно для своих целей.

[Удален]
#8

bigton,


$content = preg_replace("/[\n\r\t]/", '', $content); // Заменяем символы перевода строки и табуляции на пробел
$content = preg_replace("/[ ]{2,}/", ' ', $content); // Заменяем более 2х пробелов одним

лучше вот так


$content = preg_replace("/\s+/", ' ', $content);
ну и дальше больше всяких вещей можно)
alexandr_nv
На сайте с 23.04.2009
Offline
39
#9

preg_match_all("/<a[^<>]*href=['|\"](.*)['|\"][^<>]*>(.*)<\/a>/iU", $content, $links); // Собираем ссылки    

wtf? Кусок регулярки ['|\"] означает: любой символ из ', |, или " - то есть, ссылка вида href=|url| тоже будет ссылкой.

Нужно заменить на (?:'|\")

[Удален]
#10

а внутренние ссылки с абсолютными адресами (через http://и так далее) какими будут считаться?

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий