- preg_replace_callback: documentation ( source)
<?php
$string = '987ABC11-15; 77; 877; 66-68';
$pattern = '~(^\d+[A-Z]+)?\d+\D+\K~';
echo preg_replace_callback($pattern, function($m)use(&$prefix) {
// var_export($m); // if you want to see
if (isset($m[1])) $prefix = $m[1];
return $prefix;
}, $string, -1, $count);
echo "\nmickmackusa count = $count";
echo "\n---\n";
echo preg_replace_callback('/^(\d+[A-Z]+)|\d+/', function($m) use (&$pfx) { // more replacements, easier to comprehend
if (!empty($m[1])) $pfx = $m[1]; else return $pfx . $m[0];
}, $string, -1, $count);
echo "\nbobblebubble count = $count";