preg_replace_callback替换数组问题?

$tpl = preg_replace(
    ['/\s*([,;:\{\}])\s*/', '/[\t\n\r]/', '/\/\*.+?\*\//'],
    ['\\1', '', ''],   
    $tpl
);

准备使用preg_replace_callback替换掉preg_replace函数.目前只会使用preg_replace_callback替换字符串,该如何替换上述数组.

阅读 6.1k
3 个回答

数组替换preg_replace_callback没有preg_replace那么好用,但是也不是不能实现

$newText = preg_replace_callback(
    '/(.*?)(\s*([,;:\{\}])\s*)(.*?)([\t\n\r])(.*?)(\/\*.+?\*\/)(.*?)/i',
    function($match){
        $replaceArr = ['\\1', '', ''];
        return $match[1].$replaceArr[1].$match[3].$replaceArr[2].$match[5].$replaceArr[3].$match[7];
    },
    $yourText
); 
$tpl = preg_replace_callback_array(
                [
                    '/\s*([,;:\{\}])\s*/' => function($matches){return $matches[1];},
                    '/[\t\n\r]/' => function($matches){return '';},
                    '/\/\*.+?\*\//' => function($matches){return '';}
                ],
                    $tpl
                )
            

后来发现使用preg_replace_callback_array来处理这中不统一的替换规则更方便.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题