change preg_replace/e to preg_replace_callback()

我单独写了一个单元测试，测试了在php5.5.18环境下正常。理论上会兼容php5.2.x