【PHP】preg_replace_callbackで、キャプチャ番号ごとに別々の処理を行いたい
下記のような文字列を格納した変数に対して、
$text = 'abc';下記のような置換を行うと、コールバック関数には
どのような値が渡されるのか、
print_rで確認してみました。
$text = preg_replace_callback(
'/(a)|(b)|(c)/',
'hogeCallback',
$text
);
結果は以下の通り。
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;