preg_replace、preg_replace_callback 和数组到字符串的转换
Posted
技术标签:
【中文标题】preg_replace、preg_replace_callback 和数组到字符串的转换【英文标题】:preg_replace, preg_replace_callback and Array to string conversion 【发布时间】:2017-05-18 16:16:08 【问题描述】:我从 php 5.4 的应用程序中获得了这段代码:
$rightKey = preg_replace(array(
"/(_)(\pL1)/eu",
"/(^\pLl1)/eu"
), array(
"mb_strtoupper('\\2', 'UTF-8')",
"mb_strtoupper('\\1', 'UTF-8')"
), $key);
它没有很好地工作,因为 preg_replace 已被弃用。我做了一些研究并将其变成:
$rightKey = preg_replace_callback(array(
"/(_)(\pL1)/u",
"/(^\pLl1)/u"
), function($m) return array(
"mb_strtoupper('\\2', 'UTF-8')",
"mb_strtoupper('\\1', 'UTF-8')"
); , $key);
我把函数改成了preg_replace_callback,去掉了“e”,加了一个回调。
但现在我有:
Array to string conversion
而且,我真的不知道如何调整回调以使其正常工作^^。
谢谢:),
【问题讨论】:
另见***.com/questions/15454220/… 【参考方案1】:该函数必须返回一个字符串,而不是一个数组,每个匹配都是同一个函数:
$key = 'abc _def';
$rightKey = preg_replace_callback(array(
"/_(\pL)/u",
"/(^\pLl)/u"
),
function($m)
return mb_strtoupper($m[1], 'UTF-8');
,
$key);
echo $rightKey;
输出:
Abc Def
【讨论】:
以上是关于preg_replace、preg_replace_callback 和数组到字符串的转换的主要内容,如果未能解决你的问题,请参考以下文章