以不同方式替换字符串中的reoccuring文本

时间:2016-05-31 14:43:08

标签: php regex string

我有字符串$myString,字符串的内容是随机时间" foo",但我不知道多少次!
我想要做的是为每个" foo"添加一个唯一的数字 例如:" foo foo foo" - > " foo1 foo2 foo3"

我目前的做法: $z = 0; $myString = preg_replace ( '/foo/' , 'foo'.++$z, $myString);
然后返回" foo1 foo1 foo1"

所以我的问题是:如何在PHP中以不同的方式替换字符串中的reoccuring文本?

谢谢! MasterBolle

3 个答案:

答案 0 :(得分:1)

您可以计算字符串中单词 foo 的出现次数,然后通过循环出现的次数为每个 foo 添加一个数字:

    $myString = 'foo foo foo';
    $counts = substr_count($myString, 'foo');
    $newString = '';

    for ($i = 1; $i <= $counts; $i++) {
        $newString .= 'foo' . $i . ' ';
    }

答案 1 :(得分:1)

$myString = 'foo foo foo';
$i = 1;
echo $myString = preg_replace_callback ( '/foo/', 
                 function($str) use (&$i) {return $str[0].$i++; }, 
                 $myString); // foo1 foo2 foo3

demo

答案 2 :(得分:0)

要使用正则表达式,使用preg_replace_callback (PHP手册和SO中有很多示例)

没有正则表达式,使用explodearray_reduce

$str = 'foosdfdsfdsfdfoofoosdfdsfdfoosdfoo';
$cnt = 0;
$result = array_reduce(explode('foo', $str), function($c,$i) use (&$cnt) {
    return $c === false ? $i : $c . 'foo' . ++$cnt . $i;
}, false);