PHP字符串挑战

时间:2014-07-30 09:33:40

标签: php string recursion

我有一个字符串,如

$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}".

我希望通过递归函数来解决这个问题,但是没有得到预期的结果。

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);