如何使用 preg_replace 用计数器替换文本?

How to use preg_replace for replacing text with a counter?

我正在尝试用迭代计数器替换文本。这是我试过的:

$str = '<div><div class="list">Item1</div><div class="list">Item2</div></div>';
$i = 0;
while (strpos($str, '<div class="list">') !== false) {
    $str = preg_replace('/<div class="list">/', '<div class="list list'.$i++.'">', $str);
}

我想用 <div class="list list1"><div class="list list2"> 等替换每个出现的 <div class="list">

是否可以在不使用 preg_replace_callback 的情况下执行此操作?

正如 Wiktor Stribiżew 所注意到的,您可以使用 preg_replace_callback (docs)

<?php
$str = '<div><div class="list">Item1</div><div class="list">Item2</div></div>';

$i = 0;
$str = preg_replace_callback('/(<div class="list)(">)/',
function($matches) use (&$i){
        $i++;
        return $matches[1] . " list" . $i . $matches[2];
}
,$str);

echo $str;

输出:<div><div class="list list1">Item1</div><div class="list list2">Item2</div></div>

无回调(别忘了使用++$i):

<?php
$str = '<div><div class="list">Item1</div><div class="list">Item2</div></div>';
$i = 0;
while (strpos($str, '<div class="list">') !== false) {
    $str = preg_replace('/<div class="list">/',
        '<div class="list list' . ++$i.'">', $str, 1);
}

echo $str;