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 和数组到字符串的转换的主要内容,如果未能解决你的问题,请参考以下文章

警告:preg_replace():未知修饰符

PHP7 preg_replace出错及解决办法

PHP 在 preg_replace 上崩溃

警告:preg_replace():未知修饰符“g”

preg_replace 一次替换多个模式

PHP:输出一行不带preg_replace的HTML文档