【PHP】preg_replace_callbackで、キャプチャ番号ごとに別々の処理を行いたい

下記のような文字列を格納した変数に対して、

$text = 'abc';
下記のような置換を行うと、コールバック関数には
どのような値が渡されるのか、

$text = preg_replace_callback(
'/(a)|(b)|(c)/',
'hogeCallback',
$text
);
print_rで確認してみました。

function hogeCallback($match){
print_r($match);
}
結果は以下の通り。

Array
(
[0] => a
[1] => a
)
Array
(
[0] => b
[1] =>
[2] => b
)
Array
(
[0] => c
[1] =>
[2] =>
[3] => c
)
ということは、キャプチャ番号ごとに別々の処理を
行いたい場合は、下記のようにすればいいですね。

function hogeCallback($match){
if(isset($match[3])){
return 'c!'; //『c』に対する処理
}elseif(isset($match[2])){
return 'b!'; //『b』に対する処理
}else{
return 'a!'; //『a』に対する処理
}
}
たとえば、キャプチャ番号ごとに異なる文字色に変換したい場合を
例にすると、全体のコードは以下のように。

function hogeCallback($match){
if(isset($match[3])){
return '<span style="color:#f00">'.$match[3].'</span>';
}elseif(isset($match[2])){
return '<span style="color:#0f0">'.$match[2].'</span>';
}else{
return '<span style="color:#00f">'.$match[1].'</span>';
}
}
$text = 'abc';
$text = preg_replace_callback(
'/(a)|(b)|(c)/', 'hogeCallback', $text
);
echo $text;