使用函数对字符串中的单词组计数

时间:2014-04-09 08:53:51

标签: php function count grouping

我需要一些帮助来获取字符串中的数组计数。

我有一个包含5个单词的数组:

$array_planet = array('[Sun]', '[Moon]', '[Mercury]', '[Venus]', '[Mars]');

我有许多字符串看起来像:

$string_source = 'blabla[Sun][Sun]blabla[Moon][Moon][Moon]blabla[Sun][Sun][Sun][Sun]blabla[Venus]';

我需要一个函数来返回:

$string_out = 'blabla[Sun][2]blabla[Moon][3]blabla[Sun][4]blabla[Venus][1]';

blabla可以是任意长度和值。

3 个答案:

答案 0 :(得分:3)

只需使用preg_replace_callback()

$string_source = preg_replace_callback('/(\[[^\[\]]+\])+/', function($matches)
{
   return $matches[1].'['.(strlen($matches[0])/strlen($matches[1])).']';
}, $string_source);

请注意,我不依赖于行星数组,因为正则表达式替换不需要这样做。

小提琴可用here

答案 1 :(得分:2)

使用preg_replace_callback()来实现这一目标:

$result = preg_replace_callback('/(\[.*?])+/', function($m) {
    return $m[1].'['.substr_count($m[0], $m[1]).']';
}, $string_source);

输出:

blabla[Sun][2]blabla[Moon][3]blabla[Sun][4]blabla[Venus][1]

Demo

答案 2 :(得分:1)

我会使用preg_match_all从你的字符串中获取部分,所以你最终会这样:

array = (
 0= > 'blabla[Sun][Sun]',
 1 => 'blabla[Moon][Moon][Moon]',
 2 => 'blabla[Sun][Sun][Sun][Sun]',
 3 => 'blabla[Venus]'
);

然后遍历数组并使用str_replacesubstr_count