За последние 24 часа нас посетили 20448 программистов и 1092 робота. Сейчас ищет 891 программист ...

Помогите перевести preg_replace() в preg_replace_callback()

Тема в разделе "Прочие вопросы по PHP", создана пользователем kinlok, 23 мар 2017.

  1. kinlok

    kinlok Активный пользователь

    С нами с:
    18 мар 2017
    Сообщения:
    50
    Симпатии:
    0
    Код (Text):
    1. $source = preg_replace("#<iframe#i", "&lt;iframe", $source);
    2.         $source = preg_replace("#<script#i", "&lt;script", $source);
    3.      
    4.  
    5.  
    6. $source = preg_replace("#\[(left|right|center)\](.+?)\[/\\1\]#is", "<div align=\"\\1\">\\2</div>", $source);
    7.      
    8.         $source = preg_replace( "#\[quote\](.+?)\[/quote\]#is", "<blockquote>\\1</blockquote>", $source );
    9.      
    10.  
    11.  
    12.  
    13. if(stripos($source, "[video]") !== false || stripos($source, "[photo]") !== false || stripos($source, "[phl]") !== false || stripos($source, "[link]") !== false || stripos($source, "[color]") !== false){
    14.             $source = preg_replace("#\\[video\\](.*?)\\[/video\\]#ies", "\$this->BBvideo('\\1', '{$preview}')", $source);
    15.             $source = preg_replace("#\\[photo\\](.*?)\\[/photo\\]#ies", "\$this->BBphoto('\\1', '{$preview}')", $source);
    16.             $source = preg_replace("#\\[phl\\](.*?)\\[/phl\\]#ies", "\$this->BBphl('\\1', '{$preview}')", $source);
    17.             $source = preg_replace("#\\[link\\](.*?)\\[/link\\]#ies", "\$this->BBlink('\\1')", $source);
    18.             $source = preg_replace("#\\[color\\](.*?)\\[/color\\]#ies", "\$this->BBcolor('\\1')", $source);
    19.         }
    20.      
    21.         return $source;
    22.      
    23.     }
    24.  
    25.  
    26.  
    27. $source = preg_replace("#<div align=\"(left|right|center)\">(.+?)</div>#is", "[\\1]\\2[/\\1]", $source);
    28.      
    29.         $source = preg_replace( "#\[quote\](.+?)\[/quote\]#is", "<blockquote>\\1</blockquote>", $source );
    30.      
    31.         $source = preg_replace( "#<blockquote>(.+?)</blockquote>#is", "[quote]\\1[/quote]", $source );
    32.      
    33.  
    34. $source = preg_replace("#\\<!--video:(.*?)\\<!--/video-->#ies", "\$this->BBdecodeVideo('\\1')", $source);
    35.             $source = preg_replace("#\\<!--photo:(.*?)\\<!--/photo-->#ies", "\$this->BBdecodePhoto('\\1')", $source);
    36.             $source = preg_replace("#\\<!--phl:(.*?)\\<!--/phl-->#ies", "\$this->BBdecodePhl('\\1')", $source);
    37.             $source = preg_replace("#\\<!--link:(.*?)\\<!--/link-->#ies", "\$this->BBdecodeLink('\\1')", $source);
    38.             $source = preg_replace("#\\<!--color:(.*?)\\<!--/color-->#ies", "\$this->BBdecodeColor('\\1')", $source);
    39.         }
     
  2. Emilien

    Emilien Активный пользователь

    С нами с:
    30 июн 2016
    Сообщения:
    246
    Симпатии:
    156
    Меняешь только те preg_replace(), что с модификатором /е и $this-> в строке замены.
    PHP:
    1. $source = preg_replace("#\\[video\\](.*?)\\[/video\\]#ies", "\$this->BBvideo('\\1', '{$preview}')", $source);
    PHP:
    1.     "#\\[video\\](.*?)\\[/video\\]#is",
    2.     function ($m) use ($preview) {
    3.         return $this->BBvideo($m[1], $preview);
    4.     },
    5.     $source
    6. );