PHP 5.3/6.0のpreg_replace_callback

最新snapshotにオレオレパッチを当てようとして気付いたのですが、PHP 5.3からはpreg_replace_callback()で名前付き捕獲式集合が使えるようになってます。

<?php
function cb($m) {
    var_dump($m);
    return 'hoge';
}
echo preg_replace_callback('/(?P<foo>foo)/', 'cb', 'foobar');

上記コードの結果はPHP 5.2までは

array(2) {
  [0]=>
  string(3) "foo"
  [1]=>
  string(3) "foo"
}
hogebar

となりますが、PHP 5.3からは

array(3) {
  [0]=>
  string(3) "foo"
  ["foo"]=>
  string(3) "foo"
  [1]=>
  string(3) "foo"
}
hogebar

となります。複雑な正規表現とコールバック関数を組み合わせるとき、だいぶ楽になりますね。
PHP 5.2向けのパッチはこちら