The answer by @Casimir seems rather applicable to most cases. Another alternative is preg_replace_callback
with a counter. In case you need a specific n-th occurence to be replaced only.
#-- regex-replace an occurence by count
$s = "…abc…abc…abc…";
$counter = 1;
$s = preg_replace_callback("/abc/", function ($m) use (&$counter) {
#-- replacement for 2nd occurence of "abc"
if ($counter++ == 2) {
return "def";
}
#-- else leave current match
return $m[0];
}, $s);
This utilizes a local $counter
, incremented within the callback on each occurence, and there simply checked for a fixed position here.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…