Php 将数组上的preg_replace转换为preg_replace_回调

Php 将数组上的preg_replace转换为preg_replace_回调,php,preg-replace,preg-replace-callback,Php,Preg Replace,Preg Replace Callback,我的聊天引擎中有一个基本脚本,可以查找URL,并为用户提供可点击的链接。我使用的是PHP5.6,因此我收到了关于preg\u replace的警告,并使用了回调函数。虽然我可以使用该函数正常地执行此操作,但我正在使用一个相当复杂的数组构建此返回,并将其返回到另一个复杂数组 以下是我当前使用的代码: return preg_replace( array( '/(?(?=<a[^>]*>.+<\/a>)(?:<a[^

我的聊天引擎中有一个基本脚本,可以查找URL,并为用户提供可点击的链接。我使用的是PHP5.6,因此我收到了关于
preg\u replace
的警告,并使用了回调函数。虽然我可以使用该函数正常地执行此操作,但我正在使用一个相当复杂的数组构建此返回,并将其返回到另一个复杂数组

以下是我当前使用的代码:

    return preg_replace(
        array(
            '/(?(?=<a[^>]*>.+<\/a>)(?:<a[^>]*>.+<\/a>)|([^="\']?)((?:https?|ftp|bf2|):\/\/[^<> \n\r]+))/iex',
            '/<a([^>]*)target="?[^"\']+"?/i',
            '/<a([^>]+)>/i',
            '/(^|\s)(www.[^<> \n\r]+)/iex', 
            '/(([_A-Za-z0-9-]+)(\\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-]+)(\\.[A-Za-z0-9-]+)*)/iex'
        ),
        array(
            "stripslashes((strlen('\\2')>0?'\\1<a href=\"\\2\">\\2</a> <i class=\"fas fa-external-link-alt\"></i>\\3':'\\0'))",
            '<a\\1',
            '<a\\1 target="_blank">',
            "stripslashes((strlen('\\2')>0?'\\1<a href=\"http://\\2\">\\2</a> <i class=\"fas fa-external-link-alt\"></i>\\3':'\\0'))",
            "stripslashes((strlen('\\2')>0?'<a href=\"mailto:\\0\">\\0</a>':'\\0'))"
        ),
        $text
    );
return preg\u replace(
排列(
'/(?(?= \\3':'\\0'))",
' \\3':'\\0'))",
“带斜杠((strlen('\\2')>0?'':'\\0')”
),
$text
);

我的问题是,既然我使用的是数组,那么如何使用
preg\u replace\u callback
重写我的第二个参数以使其工作。这个与其他一些问题类似,但它们没有返回值或使用数组进行比较,我试图编写一个返回函数,类似于其他答案使用的函数,但它不起作用。在此方面的任何帮助都将不胜感激

看。我还没有测试过它,但是评论中有一个PHP<7。谢谢你的建议,它与最初的preg_replace_回调有很大的不同,所以我必须想办法现在就做哈哈