我正在尝试替换$ target_str的第二次出现。
如果有人能解释preg_replace_callback如何工作,我将不胜感激。 我不懂功能($ match)部分。如何设置它以匹配第二次出现并仅替换该字符串?
我有代码(但它不能按我的意愿工作)。
$replacement_params['target_str'] = "[\n]";
$replacement_params['replacement_str'] = "\n<ads media=googleAds1 />\n";
$target_str = $this->params['target_str'];
$replacement_str = $this->params['replacement_str'];
$num_matches;
$i = 0;
$new_text = preg_replace_callback("/".$target_str."/U",
function ( $match ) {
if ( $i === 1 ) {
return $replacement_str;
} else {
return $match[0];
}
$i++;
} , $article_text, 1, $num_matches );
答案 0 :(得分:1)
<强> 更新 强>
使用preg_replace_callback
的内置计数器变量:
$new_text = preg_replace_callback("/$target_str/U",
function($matches) use (&$count, $replacement_str)
{
$count++;
return ($count == 2) ? $replacement_str : $matches[0];
} , $article_text, -1, $count);