preg_replace на preg_replace_callback (e модификатор в php 7)

Тема в разделе "Регулярные выражения", создана пользователем Wertos, 19 окт 2017.

  1. Wertos

    Wertos Пьянь местная

    Регистр.:
    13 апр 2007
    Сообщения:
    169
    Симпатии:
    38
    PHP:
    $t str_replace(array("\t""\r""\n"' '), ''preg_replace('/"(?>(`.|[^"])*)"/sme''substr(str_replace(array(";", "|", "~", " ", ",", "/", "(", ")", \'`"\'), array("\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\x07", "\x08", "\""), "$0"), 1, -1)'trim($t)));
    Подскажите как заменить на preg_replace_callback в данном коде ? Спасибо.
     
  2. zabolots

    zabolots Постоялец

    Регистр.:
    11 сен 2012
    Сообщения:
    54
    Симпатии:
    21
    По идее вам preg_replace нужно поменять на preg_replace_callback и убрать флаг e, то есть вместо /sme указать только /sm
     
  3. Wertos

    Wertos Пьянь местная

    Регистр.:
    13 апр 2007
    Сообщения:
    169
    Симпатии:
    38
    Код:
    Warning: preg_replace_callback(): Requires argument 2, 'substr(str_replace(array(";", "|", "~", " ", ",", "/", "(", ")", '`"'), array("\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\x07", "\x08", "\""), "$0"), 1, -1)', to be a valid callback
     
  4. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    253
    Симпатии:
    325
    PHP:
    $t str_replace(
        [
    "\t""\r""\n"' '],
        
    '',
        
    preg_replace_callback(
            
    '/"((?:`.|[^"])*+)"/s',
            function (
    $m) {
                return 
    str_replace(
                        [
    "'"";""|""~"" "",""/""("")"'`"'],
                        [
    "\\'""\x01""\x02""\x03""\x04""\x05""\x06""\x07""\x08""\""],
                        
    $m[1]
                );
            },
            
    trim($t)
        )
    );
     
    Wertos нравится это.
  5. Wertos

    Wertos Пьянь местная

    Регистр.:
    13 апр 2007
    Сообщения:
    169
    Симпатии:
    38
    lag, работает ! На сколько правильно, пока не знаю. Спасибо