@KBsts

Как правильно поменять функцию preg_replace правильно на preg_replace_callback для PHP 7.2?

Перешел я тут наконец на PHP 7.2 ... И теперь ругается на функцию устаревшую!

$str = preg_replace('/"((?:""|[^"])*?)"/e', '"\\"".str_replace(";"," ","\\1")."\\""', $data);

И просит переделать её наконец в preg_replace_callback ... А каменный цветочек у меня не выходит что-то ((( Прощу помощи ...
  • Вопрос задан
  • 762 просмотра
Пригласить эксперта
Ответы на вопрос 4
@DanKud
Вы немного не верно интерпретировали устаревание. Устарела не сама функция, а модификатор /e, который вы используете. В вашем примере, если я правильно понял, должно быть так:
$str = preg_replace_callback(
    '/"((?:""|[^"])*?)"',
    function ($m) {
        return '\\"'.str_replace(';',' ',$m[1]).'\\"';
    },
    $data
);
Ответ написан
Комментировать
gobananas
@gobananas
finishhim.ru
Вы что-то путаете, эта функция не устарела php.net/manual/ru/function.preg-replace.php
Почему у вас в тексте замены другая функция?
Ответ написан
@dodo512
$str = preg_replace_callback(
    '/"(?:""|[^"])*?"/',
    function ($m) {
        return str_replace(";"," ",$m[0]);
    },
    $data
);
Ответ написан
Комментировать
@skv005
Может и мне кто поможет. Часть старого кода который уже не работает на php7. Как его переделать, может кто привести пример?:
$text = preg_replace_callback('#\[url\]([\r\n]*)(http://|ftp://|https://|ftps://)([^\s\'\"]*?)([\r\n]*)\[/url\]#sie', "'<a href=\'".$pathto."'.base64_encode('\\2\\3').'\' rel=\'nofollow\' target=\'_blank\' title=\'\\2\\3\'>'.trimlink('\\2\\3', 20).(strlen('\\2\\3')>30?substr('\\2\\3', strlen('\\2\\3')-10, strlen('\\2\\3')):'').'</a>'", $text);
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы