preg_replace() 根据出现顺序递增变量相同的字符串
preg_replace() the same string by increment variable based on occurrences order
我的字符串:
$string = "figno some text and another figno then last figno";
预期输出
1 some text and another 2 then last 3
到目前为止我试过了:
preg_match_all("/figno/s",$string,$figmatch);
$figno=0;
for($i=0;$i<count($figmatch[0]);$i++){
$figno=$figno+1;
$string=str_replace($figmatch[0][$i],$figno,$string);
}
但是它一次替换了所有出现的地方。我也尝试用 preg_replace
代替 str_replace()
但输出相同
使用preg_replace_callback
$count = 0;
preg_replace_callback('/figno/', 'rep_count', $string);
function rep_count($matches) {
global $count;
return $count++;
}
只需使用 preg_replace_callback()
,这样它就会为您获得的每个匹配项调用匿名函数,然后通过引用传递变量 $count
以跟踪匹配项的数量,例如
<?php
$string = "figno some text and another figno then last figno";
$count = 1;
echo preg_replace_callback("/figno/s", function($m)use(&$count){
return $count++;
}, $string);
?>
输出:
1 some text and another 2 then last 3
我的字符串:
$string = "figno some text and another figno then last figno";
预期输出
1 some text and another 2 then last 3
到目前为止我试过了:
preg_match_all("/figno/s",$string,$figmatch);
$figno=0;
for($i=0;$i<count($figmatch[0]);$i++){
$figno=$figno+1;
$string=str_replace($figmatch[0][$i],$figno,$string);
}
但是它一次替换了所有出现的地方。我也尝试用 preg_replace
代替 str_replace()
但输出相同
使用preg_replace_callback
$count = 0;
preg_replace_callback('/figno/', 'rep_count', $string);
function rep_count($matches) {
global $count;
return $count++;
}
只需使用 preg_replace_callback()
,这样它就会为您获得的每个匹配项调用匿名函数,然后通过引用传递变量 $count
以跟踪匹配项的数量,例如
<?php
$string = "figno some text and another figno then last figno";
$count = 1;
echo preg_replace_callback("/figno/s", function($m)use(&$count){
return $count++;
}, $string);
?>
输出:
1 some text and another 2 then last 3