将 preg_replace 转换为 preg_replace_callback 修饰符错误

convert preg_replace to preg_replace_callback modifier error

我有这个代码:

$key = preg_replace(
            '/(^|[a-z])([A-Z])/e', 
            'strtolower(strlen("\1") ? "\1_\2" : "\2")',
            substr($method, 3) 
          );

我收到 php 警告(php 5.6),我尝试将其转换为 preg_replace_callback:

$key = preg_replace_callback(
            '/(^|[a-z])([A-Z])/e',
            function($m) { 
                return strtolower(strlen("\{$m[1]}") ? "\{$m[1]}_{$m[2]}" : "\{$m[2]}"); 
            },
            substr($method, 3)
        );

但我收到此错误:

Modifier /e cannot be used with replacement callback 

有人可以帮我转换吗?

谢谢

正如评论中所说,删除 e 修饰符,我也认为你不需要大括号。
您的代码变为:

$key = preg_replace_callback(
       '/(^|[a-z])([A-Z])/',
       function($m) { 
           return strtolower(strlen($m[1]) ? "$m[1]_$m[2]" : $m[2]); 
       },
       substr($method, 3)
);