English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
preg_replace_callback関数は正規表現を検索し、コールバックを使用して置換を行います。
mixed preg_replace_callback ( mixed $pattern , callable $callback , mixed $subject [, int $limit = -1 [, int &$count ]] )
この関数の動作は、callback を指定して replacement に代わりに文字列の計算を行う以外、preg_replace() と同じです。
パラメータの説明:
$pattern: 検索するパターンです。文字列または文字列の配列で指定できます。
$callback: 置換が必要なときに呼び出されるコールバック関数です。呼び出し時、関数に渡される引数は subject からマッチした結果です。
$subject: 検索および置換する対象の文字列または文字列の配列です。
$limit: オプション、各パターンが各 subject 文字列に対して最大の置換回数です。デフォルトは-1(無制限)。
$count: オプション、置換が実行された回数です。
subject が配列の場合、preg_replace_callback()は配列を返します。他の場合、文字列を返します。エラーが発生した場合は NULL を返します。
マッチが見つかった場合、置換後のターゲット文字列(または文字列の配列)を返します。他の場合、subject は変更されずに返されます。
<?php
// テキストの年を一歳増やします.
$text = "エイプリルフールの日は 04/01/2002\n";
$text.= "去年のクリスマスは 12/24/2001\n";
// コールバック関数
function next_year($matches)
{
// 通常: $matches[0]は完全なマッチです
// $matches[1]は最初のキャプチャグループのマッチです
// これらのように続きます
return $matches[1].($matches[2]+1);
}
echo preg_replace_callback(
"|(?\d{2}/\d{2}/)(\d{4})|",
"next_year",
$text);
?>
実行結果は以下の通りです:
エイプリルフールの日は 04/01/2003 去年のクリスマスは 12/24/2002