Как в php "поймать" ссылку?

[Удален]
1150

Всем привет.

Подскажите как в php в тексте поймать ссылку и разделить её на ссылку и анкор.

Делаю вот так:


$full = preg_replace( "#<a href=[\"'](http://|https://|ftp://|ed2k://|news://|magnet:)?(\S.+?)['\"].*?" . ">(.+?)</a>#ie", "\$this->ankor('\\1\\2', '\\3')", $full );

В конечном итоге просто надо заменить анкор. Никак не получается. Помогите!!! Буду очень благодарен.

J
На сайте с 28.06.2011
Offline
83
#1
Mr.Boba:
Всем привет.
Подскажите как в php в тексте поймать ссылку и разделить её на ссылку и анкор.
Делаю вот так:

$full = preg_replace( "#<a href=[\"'](http://|https://|ftp://|ed2k://|news://|magnet:)?(\S.+?)['\"].*?" . ">(.+?)</a>#ie", "\$this->ankor('\\1\\2', '\\3')", $full );


В конечном итоге просто надо заменить анкор. Никак не получается. Помогите!!! Буду очень благодарен.

Может


<?php

$str = '<a href="test.html#testank">test</a>';

$str = preg_replace('/<a href=\"([^\"#]*)#([^\"#]*)\">([^<]*)<\/a>/', '<a href="\1#new_anchor">\3</a>', $str);

var_dump( $str );

?>

Или с калбэком:


function callback_func( $all, $link, $an, $text )
{
global $global_class;
return $global_class->func($link, $an, $text);
}

$str = preg_replace_callback('/<a href=\"([^\"#]*)#([^\"#]*)\">([^<]*)<\/a>/', 'callback_func', $str);
siv1987
На сайте с 02.04.2009
Offline
427
#2

"поймать" здесь ничего не получится, как минимум иза этого $this->ankor('\\1\\2', '\\3')

Если вы про тот гкод заменитель анкоров для дле то он работать не будет, там надо либо править класс парсера ббкодов, очевидно для него и писался этот метод $this->ankor, так как addnews это не класс, либо в самом адднюсе составить регулярку которая заменяла для всей новости.

[Удален]
#3
siv1987:
"поймать" здесь ничего не получится, как минимум иза этого $this->ankor('\\1\\2', '\\3')
Если вы про тот гкод заменитель анкоров для дле то он работать не будет, там надо либо править класс парсера ббкодов, очевидно для него и писался этот метод $this->ankor, так как addnews это не класс, либо в самом адднюсе составить регулярку которая заменяла для всей новости.

Тоесть где-то вот так:

$full_story = preg_replace( "#<a href=[\"'](http://letitbit.net/)?(\S.+?)['\"].*?" . ">(.+?)</a>#ie", "<a href=\"http://letitbit.net/\\1\"\\2" . ">Letitbit</a>", $full_story );

Если неправильно, поправьте, пожалуйста, ибо я не спец.

siv1987
На сайте с 02.04.2009
Offline
427
#4

Примерно так.


$full_story = preg_replace( "#(<a href=.+?http://letitbit.net/[^>]+>)[^<]+#i", "$1letitbit.net", $full_story );

в addnews.php добавить после


$allow_br = 1;
}
[Удален]
#5
siv1987:
Примерно так.


$full_story = preg_replace( "#(<a href=.+?http://letitbit.net/[^>]+>)[^<]+#i", "$1letitbit.net", $full_story );


в addnews.php добавить после


$allow_br = 1;
}

Огромнейшое Вам спасибо. Наконец-то заработало.

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