注: 以下は一般的な回答を意図したものであり、OP 固有の問題は以前に対処されているため、解決しようとするものではありません。
とはpreg_replace_callback()
?
この関数は、正規表現の検索と置換を実行するために使用されます。に似てstr_replace()
いますが、プレーンな文字列の代わりに、ユーザー定義の正規表現パターンを検索し、一致したアイテムにコールバック関数を適用します。この関数は、一致が見つかった場合は変更された文字列を返し、それ以外の場合は変更されていない文字列を返します。
いつ使用すればよいですか?
preg_replace_callback()
と非常によく似ていますpreg_replace()
- 唯一の違いは、2 番目のパラメーターに置換文字列を指定する代わりに、callback
関数を指定することです。
単純な正規表現の検索と置換を行う場合に使用preg_replace()
します。preg_replace_callback()
交換以外のことをしたい場合に使用します。それがどのように機能するかを理解するには、以下の例を参照してください。
それの使い方?
関数の使用法を示す例を次に示します。ここでは、日付文字列をYYYY-MM-DD
format からに変換しようとしていますDD-MM-YYYY
。
// our date string
$string = '2014-02-22';
// search pattern
$pattern = '~(\d{4})-(\d{2})-(\d{2})~';
// the function call
$result = preg_replace_callback($pattern, 'callback', $string);
// the callback function
function callback ($matches) {
print_r($matches);
return $matches[3].'-'.$matches[2].'-'.$matches[1];
}
echo $result;
ここで、正規表現パターンは、 -からの範囲の数字でNNNN-NN-NN
ある形式の日付文字列を検索します(は文字クラスの簡略表現です)。コールバック関数が呼び出され、指定された文字列内の一致する要素の配列が渡されます。N
0
9
\d
[0-9]
最終結果は次のようになります。
22-02-2014
注:上記の例は、説明のみを目的としています。日付の解析には使用しないでください。代わりにDateTime::createFromFormat()
andを使用してください。この質問には詳細があります。DateTime::format()