PHP preg_replace: Устаревший

У меня есть это устаревшее предупреждение после переключения моего php на 5.5.8,

Устаревший: preg_replace (): модификатор / e устарел, используйте вместо preg_replace_callback в C: \ wamp \ www … Curly.php в строке 28

Это функция в моем классе Curly ,

 public function replace ($input, $options = array()) { return preg_replace("/\{{2}(([az\_]+\|.+)|([az\_]+))\}{2}/Ue",'$this->_replace("\\1",$options)',$input); } 

поэтому, если я использую preg_replace_callback ,

 return preg_replace_callback("/\{{2}(([az\_]+\|.+)|([az\_]+))\}{2}/Ue",'$this->_replace("\\1",$options)',$input); 

Затем я получаю эту ошибку,

Предупреждение : preg_replace_callback (): требуется аргумент 2, '$ this -> _ replace ("\ 1", $ options)', чтобы быть действительным обратным вызовом в C: \ wamp \ www … Curly.php в строке 28

Любые идеи, как я могу это исправить?

РЕДАКТИРОВАТЬ:

 class Curly extends CoreModel { // Set the property/ variable of this class public $constant = null; /** * Extend the parent class property. */ public function __construct($connection){ // Extend parent's. parent::__construct($connection); $this->constant = new Constant($connection); } /** * Replace the curly in an input string * @param string $input * @return string */ public function replace ($input, $options = array()) { //return preg_replace("/\{{2}([az]+\|.+)\}{2}/Ue",'$this->_replace("\\1")',$input); //return preg_replace("/\{{2}(([az\_]+\|.+)|([az\_]+))\}{2}/Ue",'$this->_replace("\\1",$options)',$input); return preg_replace_callback( "/\{\{([a-z_]+(?:\|.+)?)\}\}/U", function($m) { return $this->_replace($m[1], $options); }, $input ); } /** * Run the replacement code on a given macro string * @param string $input * @return string */ private function _replace ($input,$options) { // Set local vars. $defaults = array(); // Call internal method to process the array. $array = parent::arrayMergeValues($defaults,$options); //print_r($array); // Convert array to object. $property = parent::arrayToObject($array); // type-checking comparison operator is necessary. if (strpos($input, '|') !== false) { //VERTICAL SIGN FOUND list ($name,$params) = explode("|",$input); if (method_exists($this,$name)) { return $this->$name($params); } throw new Exception ("Unrecognised macro: {$name}.",500); } else { // Get the input string and request the data from constant table. $value = $this->constant->getRow($input)->value; // If there is a value returned from the contstant table. if($value !== null) { // Return the what is returned from the the constant table. return $value; } else if(isset($property->$input)) { // If there is a customised value from the developer. // Return what is customised by the developer. return $property->$input; } else { // Nothing is found. // Return what is from the input. return "{{{$input}}}"; } } } /** * Replaces a YouTube curly * @param string $params * @return string */ private function youtube ($params) { parse_str($params); // set defaults if (!isset($id)) { $id = "ykwqXuMPsoc"; } if (!isset($width)) { $width = 560; } if (!isset($height)) { $height = 315; } // output the final HTML return "<iframe width=\"{$width}\" height=\"{$height}\" src=\"http://www.youtube.com/embed/{$id}\" frameborder=\"0\" allowfullscreen></iframe>"; } } 

Как насчет:

 public function replace ($input, $options = array()) { return preg_replace_callback( "/\{\{([a-z_]+(?:\|.+)?)\}\}/U", function($m) use($options) { return $this->_replace($m[1], $options); }, $input ); } 

В противном случае с помощью call_user_func_array :

 return preg_replace_callback( // RegExpr "/\{{2}(([az\_]+\|.+)|([az\_]+))\}{2}/Ue", // Callback array($this, '_replace'), // Data $input );