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);