php将字符串分成相同字符的子字符串

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

如何将字符串分成由相同字符组成的子字符串?

>例如 - “baabbbc”将是(“aa”,“bbbb”,“c”)

我希望它们稍后存储到数组中 -

我的代码到目前为止如下 -

function strSplit($s) {
    $sArr = str_split($s);
    sort($sArr);
    $subStrArr = Array();
    for($i=0; $i<count($sArr); $i++){
        for($j=1; $j<count($Arr); $i++){
            if($sArr[$j] == $sArr[$j-1]){
                $subStrArr[$i][$j-1] = $sArr[$j-1];
            }
        }
    }
}

更新:为错误道歉,我希望数组是这样的,

“baabbbc”将是(“b”,“aa”,“bbbb”,“c”)

php arrays regex
2个回答
4
投票

很容易与preg_split()

<?php
$string = "baabbbc";
$output_array = preg_split('/(.)(?!\1|$)\K/', $string);

print_r($output_array);

https://eval.in/920166

描述:

  • (.) - 匹配单个字符并捕获它
  • (?!\1|$) - 查看下一个位置并匹配,如果它与我们刚刚找到的位置不同,也不是字符串的结尾。
  • \K - 保持文本匹配到目前为止的整个正则表达式匹配,使这个匹配为零宽度。

2
投票

您可以使用简单的正则表达式:

<?php

$string = "baabbbc";

$regex = '~(\w)\1*~';
if (preg_match_all($regex, $string, $matches)) {
    $parts = $matches[0];
    print_r($parts);
}
?>

这产生了

Array
(
    [0] => b
    [1] => aa
    [2] => bbb
    [3] => c
)


The expression
(\w)\1*

查找单词字符并尝试使用后引用尽可能多地重复此操作。

© www.soinside.com 2019 - 2024. All rights reserved.