在出现 1 次或多次相同字符后拆分字符串

问题描述 投票:0回答:2

我无法弄清楚如何将字符串拆分为相同字符的组。我有一些与此类似的相当随机的字符组字符串:

$string = 'aaabb2222eee77777';

我希望能够像这样分割它们:

['aaa', 'bb', '2222', 'eee', '77777']

然后能够计算每组中的字符数。最简单的方法是什么?

php string split
2个回答
9
投票

然后您可以迭代数组并获取每个项目的

strlen()

preg_match_all('/(.)\1*/', 'aaabb2222eee77777', $matches);
$matches = $matches[0];
数组
(
   [0] => AAA
   [1] => bb
   [2] => 2222
   [3] => ee
   [4] => 77777
)

0
投票

如果您不想声明新的引用变量来保存结果数组,或者不想填充二维数组,或者更喜欢直接返回所需的平面结果数组,请使用

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',
)
© www.soinside.com 2019 - 2024. All rights reserved.