如何将字符串分成由相同字符组成的子字符串?
>例如 - “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”)
很容易与preg_split()
<?php
$string = "baabbbc";
$output_array = preg_split('/(.)(?!\1|$)\K/', $string);
print_r($output_array);
描述:
(.)
- 匹配单个字符并捕获它(?!\1|$)
- 查看下一个位置并匹配,如果它与我们刚刚找到的位置不同,也不是字符串的结尾。\K
- 保持文本匹配到目前为止的整个正则表达式匹配,使这个匹配为零宽度。您可以使用简单的正则表达式:
<?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*
查找单词字符并尝试使用后引用尽可能多地重复此操作。