preg_replace_callback()のこと


preg_replace()はよく使われてるけどpreg_replace_callback()ってあまり使われてるの見たことなくて、見つけたときには「おっ!」と思ったんだけど意外と良かったのでサンプル。

<?php
class SampleReplaceCallback{
  private function replace_callback($matches){
    return strtoupper($matches[0]);
  }
  public function replace($needle, $heystack){
    return preg_replace_callback($needle, array($this, 'replace_callback'), $heystack);
  }
}
$heystack = '123abc789';
$needle = '/[a-z]+/';
$replace_temp = new SampleReplaceCallback;
echo $replace_temp->replace($needle, $heystack);
  • このコードみたいにマッチした部分が一部分の場合はコールバックが返した文字列で置き換えてくれる
  • サブパターンで複数キャプチャした時は$matchesに複数入ってくるけどこの返し方がドキュメントに載ってないっぽい。(arrayで返したらそのままarrayが入る) http://php.net/manual/ja/function.preg-replace-callback.php の例2が複数のサブパターン使っているので、これと同じ様にもれなくマッチするサブパターンを組めってことなのかも。
  • この関数特有の問題ではないけれど、privateメソッドをarray($this, 'replace_callback')で呼べるのどうなの感すごくある