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];
}
就这样吧,笨是笨了点,但是解决了。