最新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向けのパッチはこちら。