Задать вопрос
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;
  • Вопрос задан
  • 1302 просмотра
Подписаться 2 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 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;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽