我有一个字符串,如
$string = "This is my test string {ABC}. This is test {XYZ}. I am new for PHP {PHP}".
现在我需要在{}中替换字符串的出现,输出将是:
This is my test string {ABC 1}. This is test {XYZ 2}. I am new for PHP {PHP 3}".
我希望通过递归函数来解决这个问题,但是没有得到预期的结果。
答案 0 :(得分:0)
$i = 1;
echo preg_replace_callback('/\{(.+?)\}/', function (array $match) use (&$i) {
return sprintf('{%s %d}', $match[1], $i++);
}, $string);
"技巧"只是让外部计数器运行,这里$i
,通过use (&$i)
在匿名回调中使用。
答案 1 :(得分:0)
这里没有递归。简单算一算。
$result = preg_replace_callback("/\{([^}]*+)\}/",function($m) {
static $count = 0;
$count++;
return "{".$m[1]." ".$count."}";
},$string);
答案 2 :(得分:0)
如果你真的需要递归:^)
$string = "This is my test string {ABC}. This is test {XYZ}. I am new for PHP {PHP}";
function my_replace($string, $count = 1)
{
if ($string)
{
return preg_replace_callback('/\{(.+?)\}(.*)$/', function (array $match) use ($count)
{
return sprintf('{%s %d} %s', $match[1], $count, my_replace($match[2], $count + 1));
}, $string, 1);
}
}
echo my_replace($string);