Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Replace deprecated preg_replace /e with preg_replace_callback [duplicate]

$result = preg_replace(     "/\{([<>])([a-zA-Z0-9_]*)(\?{0,1})([a-zA-Z0-9_]*)\}(.*)\{\\1\/\\2\}/iseU",      "CallFunction('\\1','\\2','\\3','\\4','\\5')",     $result ); 

The above code gives a deprecation warning after upgrading to PHP 5.5:

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead

How can I replace the code with preg_replace_callback()?

like image 886
dima.h Avatar asked Oct 08 '13 10:10

dima.h


1 Answers

You can use an anonymous function to pass the matches to your function:

$result = preg_replace_callback(     "/\{([<>])([a-zA-Z0-9_]*)(\?{0,1})([a-zA-Z0-9_]*)\}(.*)\{\\1\/\\2\}/isU",     function($m) { return CallFunction($m[1], $m[2], $m[3], $m[4], $m[5]); },     $result ); 

Apart from being faster, this will also properly handle double quotes in your string. Your current code using /e would convert a double quote " into \".

like image 61
NikiC Avatar answered Sep 18 '22 06:09

NikiC