Как увеличить количество в замещающей строке при использовании preg_replace?

У меня есть этот код:

$count = 0;    
preg_replace('/test/', 'test'. $count, $content,-1,$count);

Для каждой замены я получаю test0.

Я хотел бы получить test0, test1, test2 и т.д.

10
задан anno 2 February 2010 в 14:14
поделиться

3 ответа

Используйте preg_replace_callback () :

$count = 0;
preg_replace_callback('/test/', 'rep_count', $content);

function rep_count($matches) {
  global $count;
  return 'test' . $count++;
}
15
ответ дан 3 December 2019 в 14:43
поделиться

Используйте preg_replace_callback () :

class TestReplace {
    protected $_count = 0;

    public function replace($pattern, $text) {
        $this->_count = 0;
        return preg_replace_callback($pattern, array($this, '_callback'), $text);
    }

    public function _callback($matches) {
        return 'test' . $this->_count++;
    }
}

$replacer = new TestReplace();
$replacer->replace('/test/', 'test test test'); // 'test0 test1 test2'

Примечание. Использование global ] - надежное решение, но оно вызывает некоторые проблемы, поэтому я не рекомендую его.

6
ответ дан 3 December 2019 в 14:43
поделиться

preg_replace_callback() позволит вам работать с матчем, прежде чем возвращать его для последующей замены.

1
ответ дан 3 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: