(バージョン情報なし。おそらく SVN 版にしか存在しないでしょう)
mb_ereg_replace_callback — マルチバイト文字列にコールバック関数を用いた正規表現による置換を行う
$pattern
, callable $callback
, string $string
[, string $option
= "msr"
] )
string
から
pattern
にマッチする文字列を検索し、
一致した文字列をcallback
関数の出力で置換します。
この関数の動作は mb_ereg_replace()とほぼ同じですが、
replacement
パラメータの代わりに
callback
を指定するところが異なります。
この関数は、 PHP 5.4.1以降で使用可能です。
pattern
正規表現パターン。
pattern
ではマルチバイト文字列を使用可能です。
callback
コールバック関数で、
subject
文字列で一致した要素を配列で
指定してコールされます。
このコールバック関数は、置換した文字列を返す必要があります。
しばしば、
mb_ereg_replace_callback()の
callback
関数が必要となるのは一度だけである
場合があります。
この場合、
mb_ereg_replace_callback()をコールする際の
コールバックに
匿名関数 (
PHP 5.3.0以降)または create_function()を
使用することができます。
このようにすることで、
コールに関する全ての情報を一つの場所に集約し、
他のどこでも使用されないコールバック関数の名前を
関数の名前空間にばらまかないですみます。
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);
?>