使用 preg_replace_callback() 跟踪替换计数

问题描述 投票:0回答:3

我有这个代码:

function pregRepler($matches)
{
    * do something
}
 
$str = preg_replace_callback($reg_exp, 'pregRepler', $str);

在函数

pregRepler
中时,我想知道当前的
match number
,就像它是第一个匹配还是第二个匹配或其他什么。

我该怎么做?

php counting preg-replace-callback
3个回答
8
投票

尝试这样的事情:

function pregRepler($matches) {
    static $matchcount = 0;
    // do stuff
    $matchcount++;
}

这对于匿名函数效果更好,正如我在我的回答中提到的你的其他问题,因为如果你多次调用

preg_replace_callback
,这将避免出现问题。


2
投票

您需要在两个变量作用域之间共享一个

$count
变量,例如通过使用变量别名:

$callback = function($matches) use (&$count) {
    $count++;
    return sprintf("<%d:%s>", $count, $matches[0]);
};

echo preg_replace_callback($pattern, $callback , $subject, $limit = -1, $count);

调用前,

$count
等于0。调用后,
$count
设置为完成的替换次数。在这两者之间,您可以在回调中进行计数。您也可以在下次呼叫时再次设置为零。

查看实际操作

参见 http://php.net/preg_replace_callback


1
投票
$repled     = 0;
function pregRepler($matches)
{
    * do something
    global $repled;
    $repled++;
}

$str = preg_replace_callback($reg_exp,'pregRepler',$str);

只需从全局变量中计数即可。

© www.soinside.com 2019 - 2024. All rights reserved.