preg_replace_callback遇到的问题
2017-08-04
中午的时候,碰到preg_replace_callback回调的问题,测试机没有问题,线上却报语法错误,最初的写法如下,初步判断支持5.2以上的版本,可惜版本服务器是5.2,不能使用,坑。
$str = preg_replace_callback( //执行一个正则表达式搜索并且使用一个回调进行替换 '/./u', function (array $match) { return strlen($match[0]) >= 4 ? '[emoji]' : $match[0]; }, $str);
查了一下百度,国外友人说需要create_function方法,有个demo,没怎么看懂,如下
function parse_csv($csv_string, $delimiter = ",", $skip_empty_lines = true, $trim_fields = true){ $enc = preg_replace('/(?<!")""/', '!!Q!!', $csv_string); $enc = preg_replace_callback( '/"(.*?)"/s', function ($field) { return urlencode($field[1]); }, $enc ); $lines = explode("\n",$enc); return array_map( function ($line) use ($delimiter, $trim_fields) { $fields = $trim_fields ? array_map('trim', explode($delimiter, $line)) : explode($delimiter, $line); return array_map( function ($field) { return str_replace('!!Q!!', '"', urldecode($field)); }, $fields ); }, $lines ); } return array_map( create_function('$line', ' global $delimiter, $trim_fields; $fields = $trim_fields ? array_map(\'trim\', explode($delimiter, $line)) : explode($delimiter, $line); return array_map( function ($field) { return str_replace(\'!!Q!!\', \'"\', urldecode($field)); }, $fields );', $lines );
我尝试了,貌似不行,可能我的写法有问题吧。然后我就想着直接回调得了,方法如下
$str = preg_replace_callback('/./u', function($match) { return strlen($match[0]) >= 4 ? '[emoji]' : $match[0]; }, $str); return $str;
还是报错。Parse error: syntax error, unexpected T_FUNCTION 。分析了一下,指定是function的问题,只能用一个笨办法解决吧,如下
function filter_Emoji($str) { return preg_replace_callback( '/./u', "fiter_Emoji_fun", $str); } function fiter_Emoji_fun($match) { return strlen($match[0]) >= 4 ? '[emoji]' : $match[0]; }
就这样吧,笨是笨了点,但是解决了。