Edit report at https://bugs.php.net/bug.php?id=64730&edit=1
ID: 64730 Updated by: larue...@php.net Reported by: imbolk at gmail dot com Summary: preg_replace_callback vs. preg_replace eval related Status: Open Type: Feature/Change Request Package: Regexps related Operating System: Mac OS X 10.8.3 PHP Version: 5.5.0beta4 Block user comment: N Private report: N New Comment: or, add a third argument to callback, which is the "regex self" or the regex index? Previous Comments: ------------------------------------------------------------------------ [2013-04-28 17:35:06] imbolk at gmail dot com Description: ------------ In PHP 5.5 'e' key preg_replace is deprecated: https://wiki.php.net/rfc/remove_preg_replace_eval_modifier But I don't know how to replace evaled preg_replace with preg_replace_callback in some case. For example: $repl = [ '/(\d{2}|(?<!\d))([pm])(\d{2}|)([PMc])/e' => '$this->_op("$3", "$4", rtrim($this->_op("$1", "$2"), ";"))', '/(\d{2}|)([MPmplrc])/e' => '$this->_op("$1", "$2")', ]; $str = preg_replace(array_keys($repl), array_values($repl), $str); Test script: --------------- $repl = [ '/(\d{2}|(?<!\d))([pm])(\d{2}|)([PMc])/e' => function($m) { return $this->_op($m[3], $m[4], rtrim($this->_op($m[1], $m[2]), ";"))'; }, '/(\d{2}|)([MPmplrc])/e' => function ($m) { return $this->_op($m[1], $m[2]); }, ]; $str = preg_replace(array_keys($repl), array_values($repl), $str); Expected result: ---------------- It works. Actual result: -------------- Warning: preg_replace_callback(): Requires argument 2, 'Array', to be a valid callback in my.php on line 359 ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=64730&edit=1