On Mon, Apr 29, 2013 at 6:46 PM, Laruence <larue...@php.net> wrote:

> Hey:
>    there comes a FR: https://bugs.php.net/bug.php?id=64730
>
>    the main idea is, in 5.5 we remove support of 'e' modifier.
>
>    then comes a problem, the old codes(a real use case see
> https://github.com/php/php-src/blob/PHP-5.4/Zend/zend_vm_gen.php#L390):
>
>    preg_replace(array(
>
>         "/pattern1(.*)/",
>         "/pattern2(.*)/"
>    ),
>    array(
>         "/replace1/e",
>         "/replace2/e"
>     )
>     ..),
>
>    can not be easier convert to the "callback" style.
>
>    then I have to change it to something very ugly like(a real use case
> see: https://github.com/php/php-src/blob/PHP-5.5/Zend/zend_vm_gen.php#L390
> ):
>
>    function callback($subject) {
>        if (!strncmp($subject, "pattern1", 8)) {
>              //function for pattern 1
>        }  else if(!strncmp($subject, "pattern2", 8)) {
>             //function for pattern 2
>        } else .....
>
>    }
>
>    so I propose to add a second argument to callback(aim to php-5.5.1),
> which is the matched regex string self.
>
>   then I can simplify the previous codes to:
>
>   function callback ($subject, $regex) {
>         $replace_funcs = array(
>               "/pattern1(.*)" => function ($subect) { //function for
> parttern 1; },
>               "/pattern2(.*)" => function($sbuect) { //function for pattern
> 2; }
>         );
>
>        $replace_funcs[$regex]($subject);
>   }
>
>   what do you think(of course, the second argument can also easily change
> to  be the regex idx in the regex array)?
>
>   patch is here:
>
> https://bugs.php.net/patch-display.php?bug_id=64730&patch=sencode_argument.patch&revision=latest
>
>
What's wrong with this?

$replacements = ['regex' => 'callback'];
foreach ($replacements as $regex => $callback) {
    $str = preg_replace_callback($regex, $callback, $str);
}

Nikita

Reply via email to