1

文字列内の特定のトークンを置き換えるためにpreg_replace_callbackを使用しています。しかし、実際のトークンとは別に、そのトークンがサブジェクト文字列の 1 番目、2 番目、または 3 番目であったかどうかも知る必要があります。その情報にアクセスする方法はありますか?

preg_replace_callback 定義 ( http://php.net/manual/en/function.preg-replace-callback.php ) で引数$countを見つけました。これは置換をカウントしますが、コールバック内からアクセスできるかどうかはわかりません. 説明されたコンテキストでの使用例はありますか?

4

3 に答える 3

2

out 変数は、$countすべての置換が完了した後にのみ設定されます。代わりに、静的変数を試してください。

function repl($matches) {
    static $count = 0;
    ++$count;
    ...
}
preg_replace_callback('/.../', 'repl', $haystack);
于 2010-03-20T09:32:25.727 に答える
1

カウントを保持するために、非ローカル変数をいつでも作成できます。

于 2010-03-20T09:26:00.827 に答える
1

PHP 5.3+では、(グローバルまたは静的変数の代わりに)クロージャーを使用することもできます。

$counter = 0
preg_replace_callback('/.../', function($matches) use(&$counter) {
  ++$counter;
  ...
  },  $haystack
);
于 2010-03-20T10:06:22.223 に答える