alexanev6
@alexanev6
UX / UI дизайнер

Как на php удалить из текста все URL кроме назначенного?

Необходимо написать регулярное выражение, которое удаляет из текста все URL кроме назначенного, например myphp.local. Как это оптимальнее сделать? Это можно как-то прописать в регулярном выражении?
$reg = '/http(s)*:(\/{2})[a-z0-9]+(\/*[-0-9a-z_\.\/%])*/i';
$text = 'А вот ссылка http://myphp.local на вот такой ресурс  и вот еще одна http://php.net/manual/ru/function.fopen.php';
$obe = preg_replace($reg, 'НИКАКИХ ССЫЛОК', $text);
echo $obe;
  • Вопрос задан
  • 1200 просмотров
Решения вопроса 1
<?php

$allowedUrl = 'myphp.local'; // Сайт, на который ссылаться разрешено.
$replaceTo = '[Ссылка удалена]'; // Фраза, на которую нужно заменять запрещённые ссылки.
$re = '/((?:https?:/{2})?[a-z\-а-яё0-9\.]+\.[a-z\-а-я0-9ё]{2,}/?/iu'; // С учётом русских букв.

$text = 'Список ссылок: http://myphp.local, habr.com, https://toster.ru, русский-сайт.рф/.';

/* Сначала нужно найти вообще все имеющиеся в тексте ссылки. */
$links = []; // В этом массиве будет список всех ссылок.
preg_match_all($re, $text, $links); // Поиск ссылок.

$links = $links[1];

/* Теперь нужно найти те ссылки, которые ссылаются не на $allowedUrl и заменить их. */
foreach($links as $index => $url)
{
   if(strpos($url, $allowedUrl) !== false)
   {
      unset($links[$index]);
   }
}
$text = str_replace($links, $replaceTo, $text);

/* Результат. */
echo $text;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы