Регулярное выражение по удалению ссылок в тексте
Есть такая строка с ссылками
Статья подготовлена журналистом Иваном Ивановый (<a href="https://www.facebook.com/">FaceBook</a>), при поддержке IT-портала (<a href="http://test-site.com">TestSite</a>)
Как сделать так, чтоб ссылка на IT-портал <a href="http://test-site.com">TestSite</a> оставалась, а все другие ссылки удалялись с помощью регулярного выражения и заменялись на Ссылки запрещены?
Как пробовал решить задачу
Регулярное выражение /\s?<a[^>]*?>.*?<\/a>\s?/si - оно удаляет все теги ссылок, и заменяет их на Ссылки запрещены:
Статья подготовлена журналистом Иваном Ивановый (Ссылки запрещены), при поддержке IT-портала (Ссылки запрещены)
Как сделать регулярное выражение которое будет пропускать определенную ссылку?
Ответы (2 шт):
Вот так вот:
<a(?:(?!http:\/\/test-site\.com).)+?<\/a>
Статья подготовлена журналистом Иваном Ивановый (<a href="https://www.facebook.com/" >FaceBook</a>), при поддержке IT-портала (<a href="http://test-site.com" >TestSite</a>)
Добился автоматизма данной задачи. Комментарии в коде сделал, может кому пригодиться. За определенные термины с доменами прошу не ругать, Я учусь
Отдельное еще раз спасибо dIm0n за помощь с регулярным выражением
Задание:
Тестовый домен: testing.com, протокол http://
Строка: Статья подготовлена журналистом Иваном Ивановый (FaceBook), при поддержке IT-портала testing.com;
Удалить все ссылки с помощью регулярного выражения и заменялись на Ссылки запрещены кроме ссылки на IT-портал <a href="http://testing.com">testing.com</a>
Решение:
<?php
// Определение имени хоста
$linkCurrentSite = $_SERVER['HTTP_HOST'];
// Определение протокола http:// или https://
if (isset($_SERVER['HTTPS']) !== '') $connectionProtocol = 'https:'; $connectionProtocol = 'http:';
// Определение верхнего уровня домена с переменной $linkCurrentSite
$topLevelDomain = substr($linkCurrentSite, 0, (strpos($linkCurrentSite, '.') - strlen($linkCurrentSite)));
// Определение нижнего уровня домена с переменной $linkCurrentSite
$lowerLevelDomain = substr($linkCurrentSite, strpos($linkCurrentSite, '.'), strlen($linkCurrentSite));
// Произвольный текст с ссылкой для удаления и пропуска регулярным выражением
$arbitraryString = 'Статья подготовлена журналистом Иваном Ивановый (<a href="https://www.facebook.com/" target="_blank">FaceBook</a>), при поддержке IT-портала <a href="' . $connectionProtocol . '//' . $linkCurrentSite . '" target="_blank">' . $linkCurrentSite . '</a>';
// Регулярное выражение, которое пропустит ссылку соответствующую ссылке из трех частей $connectionProtocol + $topLevelDomain + $lowerLevelDomain
$regularExpressionLinks = '/<a(?:(?!' . $connectionProtocol . '\/\/' . $topLevelDomain . '\\' . $lowerLevelDomain . ').)+?<\/a>/';
// Результат работы регулярного выражения, где ссылки не прошедшие проверку заменяться на 'Ссылки запрещены'
echo preg_replace($regularExpressionLinks, '<u>Ссылки запрещены</u>', $arbitraryString);
?>
Результат: Статья подготовлена журналистом Иваном Ивановый (Ссылки запрещены), при поддержке IT-портала testing.com