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

时间:2017-12-16 07:17:36

标签: php arrays regex

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

<击>&GT;例如 - “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”)

2 个答案:

答案 0 :(得分:4)

轻松使用preg_split()

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

print_r($output_array);

https://eval.in/920166

说明

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

答案 1 :(得分: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*

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