如何知道preg_replace_callback-PHP中的匹配计数

如何知道preg_replace_callback-PHP中的匹配计数,php,preg-replace-callback,Php,Preg Replace Callback,我有以下php代码-: function pregRepler($matches) { * do something } $str = preg_replace_callback($reg_exp,'pregRepler',$str); 在函数pregRepler中,我想知道当前的匹配号,比如它是第一个匹配还是第二个匹配或其他什么 我该怎么做。??试试这样的方法: function pregRepler($matches) { static $matchcount = 0;

我有以下php代码-:

function pregRepler($matches)
{
    * do something
}

$str = preg_replace_callback($reg_exp,'pregRepler',$str);
在函数pregRepler中,我想知道当前的匹配号,比如它是第一个匹配还是第二个匹配或其他什么


我该怎么做。??

试试这样的方法:

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

正如我在中提到的那样,匿名函数的效果更好,因为如果有多个preg\u replace\u回调调用,这将避免出现问题。

请尝试以下方法:

function pregRepler($matches) {
    static $matchcount = 0;
    // do stuff
    $matchcount++;
}
正如我在到中提到的那样,对于匿名函数,这会更好,因为如果您有多个preg_replace_回调调用,这将避免出现问题

只需从全局变量开始计数

只需从全局变量中计数。

您需要在两个变量范围之间共享$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设置为完成的替换数。在这两者之间,你可以在你的回调中计数。您也可以在下次呼叫时再次设置为零

请参见

您需要在两个变量范围之间共享$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设置为完成的替换数。在这两者之间,你可以在你的回调中计数。您也可以在下次呼叫时再次设置为零


请参见

@Kolink您不应该在函数外部定义静态吗?这不会在每次调用时都将$matchcount重置为0吗?@nl-x否,该变量是静态的,因此它将只定义和初始化一次。@M8R-1jmw5r计算回调外部使用的总数,而不是回调内部的运行计数。@RayZ如果我的回答对您有所帮助,请考虑将它们标记为通过点击Posits标记下的复选标记来接受。@ KoLink不应该在函数之外定义静态吗?这不会在每次调用时都将$matchcount重置为0吗?@nl-x否,该变量是静态的,因此它将只定义和初始化一次。@M8R-1jmw5r计算回调外部使用的总数,而不是回调内部的运行计数。@RayZ如果我的回答对您有所帮助,请考虑将它们标记为通过点击Posits标记下的复选标记来接受。我知道这是一个老问题,但是因为PHP5.1.0已经添加了一个计数变量。你可以用它来计数。preg_replace_callback$regex、callback_函数、$subject、$limit和$count我知道这是一个老问题,但从PHP5.1.0开始,添加了一个count变量。你可以用它来计数。preg_replace_callback$regex、callback_函数、$subject、$limit和$count