Удалить все ссылки из текста кроме внутренних

HR
На сайте с 22.08.2010
Offline
94
3780

Подскажите как вырезать все внешние ссылки из текста, кроме внутренних? У меня получается вырезать все ссылки из текста с помощью preg_replace, но как оставить внутренние ссылки?

Вот пример текста:

"алала <a href="http://yandex.ru/">анкор1</a> лалала <a href="http://google.ru/">анкор2</a> ла лала <a href="http://site.ru/">анкор3</a>"

Должно получиться:

"алала анкор1 лалала анкор2 ла лала <a href="http://site.ru/">анкор3</a>"

Нужно вырезать все ссылки, оставляя анкоры, кроме site.ru.

LovelAss
На сайте с 05.06.2009
Offline
96
#1


$text = preg_replace('#<a.+?href=[\'"](?!http:\/\/site\.ru|(?!https?:))[^\'"]*[\'"][^>]*>(.*?)<\/a>#is', '$1', $text);

А лучше использовать preg_replace_callback и не ломать себе голову.

HR
На сайте с 22.08.2010
Offline
94
#2

Огромное спасибо! Я весь инет обшарил не нашел. А сам не смог сделать..

---------- Добавлено 23.01.2016 в 04:10 ----------

LovelAss, подскажи пожалуйста как сделать так:

"алала анкор1 <a href="http://yandex.ru/">http://yandex.ru/</a> лалала анкор2 <a href="http://google.ru/">http://google.ru/</a> ла лала <a href="http://site.ru/">анкор3</a>"

Т.е. у меня еще стоит задача поменять ссылки в тексте на безанкорные. В твоем примере $1 это анкор, а как сделать что бы в переменную $2 можно было занести еще и урл ссылки?

LovelAss
На сайте с 05.06.2009
Offline
96
#3


$text = preg_replace('#<a.+?href=[\'"]((?!http://site\.ru|(?!https?:))[^\'"]*)[\'"][^>]*>(.*?)<\/a>#is', '$1 = $2', $text);
HR
На сайте с 22.08.2010
Offline
94
#4
LovelAss:

$text = preg_replace('#<a.+?href=[\'"]((?!http://site\.ru|(?!https?:))[^\'"]*)[\'"][^>]*>(.*?)<\/a>#is', '$1 = $2', $text);

хм почему то не работает если ссылки в тексте поменять местами "<a href="http://site.ru/">анкор3</a> алала <a href="http://yandex.ru/" >анкор1</a> лалала <a href="http://google.ru/">анкор2</a> ла лала"

LovelAss
На сайте с 05.06.2009
Offline
96
#5


$text = preg_replace('#<a[^>]+href=[\'"](?!http:\/\/site\.ru)[^\'"]*[\'"][^>]*>(.*?)<\/a>#is', '$1', $text);
HR
На сайте с 22.08.2010
Offline
94
#6

Спасибо еще раз! Все прекрасно работает. Надеюсь это кому то еще поможет!

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