preg_replace_callback

関数の概要

preg_replace_callbackは、PHPの正規表現関数の一つで、マッチした部分ごとにコールバック関数を使って置換を行うための関数です。通常の正規表現置換では文字列で置換しますが、この関数はマッチした内容に応じて動的に置換文字列を生成したいときに便利です。

パラメータの説明

  • pattern:置換対象の正規表現パターン(文字列または配列)
  • callback:置換用のコールバック関数。マッチした部分の情報を引数として受け取り、置換後の文字列を返す
  • subject:検索・置換対象の文字列または配列
  • limit(省略可能):置換の最大回数。デフォルトは -1(制限なし)
  • count(省略可能):置換が何回行われたかを受け取る変数への参照渡し

戻り値

置換後の文字列または配列を返します。置換処理に失敗した場合は元の文字列を返します。

使用例

基本的な使い方

<?php
// 数字を見つけて二倍にする例
function doubleNumbers($matches) {
    return $matches[0] * 2;
}

$text = "数字は12と7です。";
$result = preg_replace_callback('/d+/', 'doubleNumbers', $text);
echo $result; // 数字は24と14です。
?>

この例では、文字列の中の数字部分を正規表現で探し、数字自体を2倍して置換しています。

配列で複数の文字列を置換する例

<?php
function addBrackets($matches) {
    return '[' . $matches[0] . ']';
}

$lines = [
    "商品番号: 1001",
    "商品番号: 1002",
    "商品番号: 1003"
];

$result = preg_replace_callback('/d+/', 'addBrackets', $lines);
print_r($result);
/*
Array
(
    [0] => 商品番号: [1001]
    [1] => 商品番号: [1002]
    [2] => 商品番号: [1003]
)
*/
?>

対象が配列の場合も、それぞれの要素に対して置換処理が行われます。

無名関数(クロージャ)を使った例

<?php
$text = "請求金額は5000円、消費税は500円です。";

$result = preg_replace_callback('/d+/', function($matches) {
    return number_format($matches[0]);
}, $text);

echo $result; // 請求金額は5,000円、消費税は500円です。
?>

コールバックに無名関数を使い、マッチした数字をカンマ付きの数値にフォーマットしています。

関連する関数

  • preg_replace – 置換文字列を直接指定する正規表現置換
  • preg_match – 正規表現によるマッチを調べる
  • preg_match_all – 正規表現にマッチしたすべての部分を取得する

まとめ

preg_replace_callbackは正規表現のマッチに対して、動的に処理を行いたい場合に非常に役立つ関数です。単純な文字列置換では対応できない複雑な変換や計算を行いたいときに使いましょう。配列にも対応しており、実務のテキスト処理でも柔軟に利用可能です。関数にはコールバックを自由に設定できるため、用途に応じて多彩な置換処理を実現できます。