В общем задача передо мной я поставил такую: все внешние ссылки с контента убрать КРОМЕ тех у которых есть id="linksss", но при выводе убирать id="linksss". Возможно ли сие реализовать и сколько потребуется regex'ов?
я нашел
<?
/**
* Получение внешних ссылок со страницы
*
* @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();
}
- выводит все внешние ссылки, но как мне дописать все остальное?
p.s. я понимаю что каждый второй у вас спрашивает про регулярки, но не даются они мне...
Спустя 1 час, 40 минут, 27 секунд (3.12.2010 - 10:34) twin написал(а):
Не смущает то, что атрибут ID должен быть уникальным?
Другими словами на странице не может быть больше одной ссылки с id="linksss"?
Другими словами на странице не может быть больше одной ссылки с id="linksss"?
Спустя 1 час, 31 минута, 16 секунд (3.12.2010 - 12:05) collapse написал(а):
twin хотел сказать что правильнее использовать class="linksss"
Спустя 23 минуты, 29 секунд (3.12.2010 - 12:29) twin написал(а):
Ну вот упростил маненько
function getoutlinks($content, $domain)
{
$out = array();
preg_match_all("#(<a[^>]*href=['|\"]http://(.*)['|\"][^<>]*>(.*)<\/a>)#iU", $content, $links);
foreach ($links[1] as $v)
if (strpos($v, $domain) == false && strpos($v, 'class="linksss"') !== false)
$out[] = str_replace('class="linksss"', '', $v);
return $out;
}
$text = '<a href="http://www.site.ru" class="linksss" >ссыль</a>'
.'<a href="http://www.site2.ru" class="linksss" >ссыль</a>'
.'<a href="http://www.site2.ru" >ссыль</a>';
print_r(getoutlinks($text, 'site.ru'));
Спустя 1 час, 27 минут, 36 секунд (3.12.2010 - 13:56) soniclord написал(а):
:rolleyes:
Спасибо! а есть ли вероятность такую ссылку оставить на ее месте, а не выковыривать?
т.е. просто тупо такие ссылки пропускать
наверное изначально неправильно сформулировал вопрос. мне бы хотелось все внешние ссылки вырезать, за исключением с классом class="linksss", их оставлять на месте.
для резалки всех внешних ссылок я яспользую
Спасибо! а есть ли вероятность такую ссылку оставить на ее месте, а не выковыривать?
т.е. просто тупо такие ссылки пропускать
наверное изначально неправильно сформулировал вопрос. мне бы хотелось все внешние ссылки вырезать, за исключением с классом class="linksss", их оставлять на месте.
для резалки всех внешних ссылок я яспользую
$text=preg_replace('|<a href="http://(.*?)"(.*?)>|is', "\\3", $text);
Спустя 54 минуты, 10 секунд (3.12.2010 - 14:50) soniclord написал(а):
я допер, я допер!! :D
$text=preg_replace('|^<a href="http://(.*?)"\sclass="linksss">(.*?)</a>|is', "\\3", $text);
Спустя 3 минуты, 40 секунд (3.12.2010 - 14:54) twin написал(а):
$domain = 'site.ru';Всё, дальше сам думай. А то так ножки свесишь. :)
function getoutlinks($out)
{
global $domain;
if (strpos($out[0], $domain) === false && strpos($out[0], 'class="linksss"') !== false)
return str_replace('class="linksss"', '', $out[0]);
}
$text = 'текст <a href="http://www.site.ru" class="linksss" >ссыль</a>'
.'текст <a href="http://www.site2.ru" class="linksss" >ссыль</a>'
.'текст <a href="http://www.site3.ru" >ссыль</a>';
$text = preg_replace_callback("#<a[^>]*href=['|\"]http://(.*)['|\"][^<>]*>(.*)<\/a>#iU", 'getoutlinks', $text);
echo $text;
Спустя 57 секунд (3.12.2010 - 14:55) twin написал(а):
Уже сам сделал, молодца.

Спустя 18 минут, 12 секунд (3.12.2010 - 15:13) soniclord написал(а):
twin, Благодарю! :-)
Спустя 2 часа, 42 минуты, 22 секунды (3.12.2010 - 17:55) Игорь_Vasinsky написал(а):
та.. а кто меня поднатаскает на регулярки???

Спустя 1 день, 17 часов, 43 минуты, 46 секунд (5.12.2010 - 11:39) soniclord написал(а):
как думаете, эти 3 выражения сильно будут тормозить систему? может можно их как-то совместить?
$text=preg_replace('|<a href="http://(.*?)">(.*?)</a>|is', "\\2", $text);
$text=preg_replace('|%"http://(.*?)"\s(.*?)%|is', "<a href=\"http://\\1\">\\2</a>", $text);
echo preg_replace("!</p><p>(.*?)</p>!si",'текст',$text,1);