用preg_replace_callback替换/ e修饰符

MultiformeIngegno

在此代码段中,我得到了preg_replace(): The /e modifier is deprecated, use preg_replace_callbackPHP 5.5中的著名错误

    if (stripos($message, '[' . $tag . ']') !== false)
        $message = preg_replace('~\[' . $tag . ']((?>[^[]|\[(?!/?' . $tag . '])|(?R))+?)\[/' . $tag . ']~ie',
            "'[" . $tag . "]' . str_ireplace('[smg', '[smg', '$1') . '[/" . $tag . "]'", $message);

有人告诉我我需要这样做:

  • 在函数调用中添加_callback,
  • 删除“ e”修饰符,
  • 并将替换字符串替换为:

    function ($match) use ($tag) { return '[' . $tag . ']' . str_ireplace('[smg', '[smg', $match[1]) . '[/' . $tag . ']'; }
    

你能帮我吗?我真的不知道该怎么做...

卡西米尔和希波吕特

您可以使用此:

$pattern = '~(\[' . $tag . '])((?>[^[]++|\[(?!/?+' . $tag . '])|(?R))*+)(\[/'
         . $tag . '])~i';
$message = preg_replace_callback($pattern,
                                 function ($m) {
                                     return $m[1]
                                          . str_ireplace('[smg', '[smg', $m[2])
                                          . $m[3];
                                 }, $message);

注意:另一种方式(更具可读性)使用详细模式和heredoc语法编写相同的模式:

$pattern = <<<EOF
~
(\[  $tag ])
( (?> [^[]++ | \[(?!/?+ $tag ]) | (?R) )*+ )
(\[/ $tag ])
~ix
EOF;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

用preg_replace_callback替换'e'修饰符

将preg_replace()e修饰符替换为preg_replace_callback

mpdf错误-preg_replace():/ e修饰符已弃用,请改用preg_replace_callback

preg_replace_callback():未知修饰符“ /”

PHP7-不再支持/ e修饰符,请使用preg_replace_callback

WP-lightbox 已弃用:preg_replace():/e 修饰符已弃用,请改用 preg_replace_callback

正确替代Deprecated:preg_replace():不赞成使用/ e修饰符,使用preg_replace_callback吗?

如何用preg_replace_callback()替换代码?(/ e)

preg_replace / e修饰符不推荐使用数组作为模式和替换

preg_replace():未知修饰符“ \\”

对于HHVM不推荐使用preg_replace()/ e修饰符

带有e /修饰符的函数preg_replace的替代方法

不推荐使用:preg_replace():不推荐使用/ e修饰符

preg_match():未知修饰符')'

preg_match():未知修饰符

“ e”修饰符在preg_match中是什么意思?

关闭preg_replace中的g(全局)修饰符

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

有什么用比类访问修饰符限制较少的成员访问修饰符的?

preg_match返回未知的修饰符

Laravel preg_match():未知修饰符']'

Preg_match_all():未知修饰符“ w”

PHP字符串替换修饰符

PHP 用 preg_replace_callback 替换所有出现

Mode_switch修饰符是做什么用的?

如何使用舊的 PHP 腳本?preg_match(): 不再支持 /e 修飾符,改用 preg_replace_callback

如何使用preg_replace_callback代替preg_replace用链接html替换单词?

在preg_match_all()中使用preg_quote()时使用未知修饰符

Laravel后端验证preg_match():未知修饰符'?' 使用正则表达式