mb_ereg_match
mb_ereg_replace
マルチバイト文字列 関数
PHP Manual

# mb_ereg_replace_callback

(PHP 5 >= 5.4.1)

mb_ereg_replace_callback — マルチバイト文字列にコールバック関数を用いた正規表現による置換を行う

### 説明

string mb_ereg_replace_callback ( string `$pattern` , callable `$callback` , string `$string` [, string `$option` = "msr" ] )

`string`から `pattern`にマッチする文字列を検索し、 一致した文字列を`callback`関数の出力で置換します。

この関数の動作は mb_ereg_replace()とほぼ同じですが、 `replacement`パラメータの代わりに `callback`を指定するところが異なります。

### パラメータ

`pattern`

  正規表現パターン。

  `pattern`ではマルチバイト文字列を使用可能です。

`callback`

  コールバック関数で、 `subject`文字列で一致した要素を配列で 指定してコールされます。 このコールバック関数は、置換した文字列を返す必要があります。

  しばしば、 mb_ereg_replace_callback()の `callback`関数が必要となるのは一度だけである 場合があります。 この場合、 mb_ereg_replace_callback()をコールする際の コールバックに 匿名関数 を使用することができます。 このようにすることで、 コールに関する全ての情報を一つの場所に集約し、 他のどこでも使用されないコールバック関数の名前を 関数の名前空間にばらまかないですみます。

`string`

  チェックされるstring。

`option`

  `option` パラメータにより検索条件を指定できます。このパラメータに iが指定された場合、 大文字/小文字が無視されます。 x が指定された場合、 空白文字が無視されます。 mが指定された場合、 検索はマルチラインモードで行われ、改行文字が'.'に含まれるようになります。 p が指定された場合、 POSIXモードで検索が 行われ、 改行文字は通常の文字とみなされます。 eは mb_ereg_replace_callback()では使用できないことに 注意してください。

### 返り値

成功した際に string、 そうでない場合はエラー時に `FALSE` を 返します。

### 注意

> 注意:

> 内部エンコーディングあるいは mb_regex_encoding() で指定した文字エンコーディングを、 この関数の文字エンコーディングとして使用します。

### 例

例1 mb_ereg_replace_callback() の例

`<?php
// this text was used in 2002
// we want to get this up to date for 2003
$text = "April fools day is 04/01/2002\n";
$text.= "Last christmas was 12/24/2001\n";
// the callback function
function next_year($matches)
{
// as usual: $matches[0] is the complete match
// $matches[1] the match for the first subpattern
// enclosed in '(...)' and so on
return $matches[1].($matches[2]+1);
}
echo mb_ereg_replace_callback(
"(\d{2}/\d{2}/)(\d{4})",
"next_year",
$text);
?>`

上の例の出力は以下となります。

    April fools day is 04/01/2003
    Last christmas was 12/24/2002

例2 PHP 5.3.0以降でサポートされる匿名関数を使用した mb_ereg_replace_callback()の例

`<?php
// this text was used in 2002
// we want to get this up to date for 2003
$text = "April fools day is 04/01/2002\n";
$text.= "Last christmas was 12/24/2001\n";
echo mb_ereg_replace_callback(
"(\d{2}/\d{2}/)(\d{4})",
function ($matches) {
return $matches[1].($matches[2]+1);
},
$text);
?>`

### 参考

- mb_regex_encoding() - 現在のマルチバイト正規表現用のエンコーディングを取得または設定する
- mb_ereg_replace() - マルチバイト文字列に正規表現による置換を行う
- 匿名関数
- callback 型に関する情報

mb_ereg_match
mb_ereg_replace
マルチバイト文字列 関数
PHP Manual