如何使用 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;
我正在尝试用迭代计数器替换文本。这是我试过的:
$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;