1

我正在使用preg_replace_callback替换字符串中的特定标记。但除了实际的标记之外,我还需要知道该标记是主题字符串中的第一个、第二个还是第三个。有没有办法访问该信息?

我在 preg_replace_callback 定义(http://php.net/manual/en/function.preg-replace-callback.php )中找到了一个参数$count,它计算了替换,但我不确定它是否可以从回调中访问. 在所描述的上下文中使用的任何示例?

4

3 回答 3

2

只有在$count所有替换完成后才会设置 out 变量。相反,请尝试使用静态变量:

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 回答