如何将字符串分成由相同字符组成的子字符串?
<击>&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”)
答案 0 :(得分:4)
轻松使用preg_split()
<?php
$string = "baabbbc";
$output_array = preg_split('/(.)(?!\1|$)\K/', $string);
print_r($output_array);
说明
(.)
- 匹配单个字符并将其捕获(?!\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*
查找单词字符,并尝试使用后引用尽可能多地重复此字符。