我无法弄清楚如何将字符串拆分为相同字符的组。我有一些与此类似的相当随机的字符组字符串:
$string = 'aaabb2222eee77777';
我希望能够像这样分割它们:
['aaa', 'bb', '2222', 'eee', '77777']
然后能够计算每组中的字符数。最简单的方法是什么?
strlen()
:
preg_match_all('/(.)\1*/', 'aaabb2222eee77777', $matches);
$matches = $matches[0];
数组 ( [0] => AAA [1] => bb [2] => 2222 [3] => ee [4] => 77777 )
如果您不想声明新的引用变量来保存结果数组,或者不想填充二维数组,或者更喜欢直接返回所需的平面结果数组,请使用
preg_split()
而不是 preg_match_all()
.
捕获任何一个字符,然后匹配该字符的零个或多个后续副本,然后使用
\K
忘记这些字符——这将允许该函数在每个重复字符序列之后的零宽度位置上进行分割。
代码:(演示)
$string = 'aaabb2222eee77777';
var_export(
preg_split('/(.)\1*\K/', $string, flags: PREG_SPLIT_NO_EMPTY)
);
array (
0 => 'aaa',
1 => 'bb',
2 => '2222',
3 => 'eee',
4 => '77777',
)