【问题标题】:php divide string into substrings of identical charactersphp将字符串分成相同字符的子字符串
【发布时间】:2017-12-16 07:17:36
【问题描述】:

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

> 例如 - "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


    【解决方案1】:

    轻松使用preg_split()

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

    https://eval.in/920166

    说明:

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

    【讨论】:

    • 对不起,我问的问题有点不对劲,请检查更新。
    • @KumarAnand 检查我编辑的解决方案,我已经根据新的更新完全改变了它。
    • 是的,我刚刚看到了。您也可以使用:(.)\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
    )
    


    表达方式
    (\w)\1*
    

    查找一个单词字符并尝试使用反向引用尽可能频繁地重复此操作。

    【讨论】:

    • 其实这已经接近我需要的了。谢谢。
    • 没有PREG_SET_ORDER,您不必使用array_map
    • @CasimiretHippolyte:已更新,感谢您发现它。与此同时,问题发生了变化。
    猜你喜欢
    • 2019-01-07
    • 1970-01-01
    • 2015-06-06
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多