PHP入門 正規表現関数 正規表現で置き換えたコールバック関数で処理する(preg_replace_callback関数)
preg_replace_callback関数を利用することで、正規表現パターンにマッチした結果をコールバック関数で処理した上で置き換えることも可能です。
構文:preg_match関数
preg_replace_callback(string|array $pattern, callable $callback,
string|array $subject [, int $limit = -1 [, int &$count[, int $flags]]]):string|array|null
$pattern | 正規表現パターン |
$callback | 置き換え文字列を加工するための関数 |
$subject | 置き換え対象の文字列 |
$limit | 置換の上限回数(規定では無制限) |
&$count | 実際に置換が行われた回数を受け取る変数 |
$flags | 動作フラグ |
引数$callback(無名関数)は、以下のルールに則っていなければなりません。
- 引数はマッチした文字列の配列
- 戻り値は置き換え後の文字列
例:マッチしたURL文字列を大文字に変換する
マッチした文字列全体($matches[0])を引数に、mb_convert_case関数を呼び出しています。
<?php
$msg = <<<EOD
洋風亭のとんかつは予約は、次のHP(http://wwww.tonton.co.jp/)からご予約することができます。なお、仕出し弁当の
ご予約は、次のHP(http://wwww31.shidasi.jp/)からご予約お願い申し上げます。
EOD;
print preg_replace_callback(
'|http(s)?://([\w-]+\.)+[\w]+(/[\w ./?%&=-]*)?|',
function($matches){
foreach($matches as $match){
return mb_convert_case($match, MB_CASE_UPPER);
}
},$msg);