@Korneliy

Как в регулярке сделать исключение?

Есть такой код:
$foo = preg_replace('/\[url=([^\s]*)\]\[img(.*?)\]([^\s]*)\[\/img\]\[\/url\]/i', '[img$2]$3[/img]', $foo);

Он убирает ссылки с картинок.
Как сделать так, чтобы для определенного сайта он ссылки с картинок не убирал? А для остальных убирал.

Заранее благодарен за ответы!
  • Вопрос задан
  • 101 просмотр
Пригласить эксперта
Ответы на вопрос 2
@dodo512
C помощью lookahead (?!...)
$text = preg_replace(
    '#\[url=(?!https?://site\.ru)\S*\](\[img.*?\]\S*\[/img\])\[/url\]#i',
    '$1',
    $text
);


Или с помощью callback-функции
$white_list = ['site3.ru', 'site4.ru'];
$text = '
[url=https://site1.ru/page][img]https://site1.ru/file.jpg[/img][/url]
[url=https://site2.ru/page][img]https://site2.ru/file.jpg[/img][/url]
[url=https://site3.ru/page][img]https://site3.ru/file.jpg[/img][/url]
[url=https://site4.ru/page][img]https://site4.ru/file.jpg[/img][/url]
';

$text = preg_replace_callback(
    '#\[url=(\S*)\](\[img.*?\]\S*\[/img\])\[/url\]#i',
    function ($m) use($white_list) {
        $host = parse_url($m[1], PHP_URL_HOST);
        if (in_array($host, $white_list))
            return $m[0];
        
        return $m[2];
    },
    $text
);

sandbox.onlinephpfunctions.com/code/48cddfef32affd...
Ответ написан
Комментировать
@alekcena
Нелинейный наставник
ЭМ
ЕСЛИ САЙТ !== "Нужный сайт"
ПРОВЕРЯЕМ
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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