PHP 将所有出现的地方替换为 preg_replace_callback

PHP replace all occurences with preg_replace_callback

我有一个包含文本的变量,我需要替换所有与某个正则表达式匹配的事件,每个事件都必须由处理该事件的函数的结果进行更改,所以我必须使用 preg_replace_callback() 以便将每个匹配项传递给回调,回调将 return 文本替换它。这是我的代码:

$fileContent = preg_replace_callback('/^.*video.*controls.*video.*$/m', function($matches){
                    foreach($matches as $k => $match){
                        $matches[$k] = str_replace('controls','controls controlsList="nodownload"', $match);
                    }
                    return $matches;
                }, $fileContent);

这会导致错误,因为该函数必须 return 一个字符串,但我不明白它如何期望一个匹配数组作为参数和 return 一个字符串 ?

您没有任何捕获组,匹配项在 $matches[0]

使用:

$fileContent = preg_replace_callback('/^.*video.*controls.*video.*$/m', function($matches){
                        $matches[0] = str_replace('controls','controls controlsList="nodownload"', $match);
                    return $matches[0];
                }, $fileContent);

但是,对于您的情况,这样做就足够了:

$fileContent = preg_replace('/^(.*video.*)controls(.*video.*)$/m', 'controls controlsList="nodownload"', $fileContent);