Php 将数组上的preg_replace转换为preg_replace_回调
我的聊天引擎中有一个基本脚本,可以查找URL,并为用户提供可点击的链接。我使用的是PHP5.6,因此我收到了关于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[^
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_回调有很大的不同,所以我必须想办法现在就做哈哈