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);
我有一个包含文本的变量,我需要替换所有与某个正则表达式匹配的事件,每个事件都必须由处理该事件的函数的结果进行更改,所以我必须使用 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);