PHP字符串扩展

PHP字符串扩展,php,arrays,string,Php,Arrays,String,我有一个由许多字母组成的字符串,在某一点上,可以使用一个组中的一个字母,这是由[]中包含的字母表示的。我需要把这些字母展开成实际的字符串 由此: $str='ABCCDF[GH]IJJ[KLM]' 为此: $sub[0] = 'ABCCDFGIJJK'; $sub[1] = 'ABCCDFHIJJK'; $sub[2] = 'ABCCDFGIJJL'; $sub[3] = 'ABCCDFHIJJL'; $sub[4] = 'ABCCDFGIJJM'; $sub[5] = 'ABCCDFHIJJM

我有一个由许多字母组成的字符串,在某一点上,可以使用一个组中的一个字母,这是由[]中包含的字母表示的。我需要把这些字母展开成实际的字符串

由此:

$str='ABCCDF[GH]IJJ[KLM]'

为此:

$sub[0] = 'ABCCDFGIJJK';
$sub[1] = 'ABCCDFHIJJK';
$sub[2] = 'ABCCDFGIJJL';
$sub[3] = 'ABCCDFHIJJL';
$sub[4] = 'ABCCDFGIJJM';
$sub[5] = 'ABCCDFHIJJM';
更新:

感谢@Barmar提供了非常有价值的建议

我的最终解决办法是:

$str = '[GH]DF[IK]TF[ADF]';

function parseString(string $str) : array
{
    $i = 0;
    $is_group = false;
    $sub = array();
    $chars = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);

    foreach ($chars as $key => $value)
    {
        if(ctype_alpha($value))
        {
            if($is_group){
                $sub[$i][] = $value;
            } else {
                if(!isset($sub[$i][0])){
                    $sub[$i][0] = $value;
                } else {
                    $sub[$i][0] .= $value;
                }
            }
        } else {
            $is_group = !$is_group;
            ++$i;
        }
    }
    return $sub;
}
推荐的组合功能是(查看相关帖子):


将字符串转换为二维数组。括号外的部分变为单元素数组,而每个括号内的字符串变为单字符数组。因此,您的字符串将变成:

$array = 
    array(array('ABCCDF'),
          array('G', 'H', 'I'),
          array('IJJ'),
          array('K', 'L', 'M'));
然后你只需要计算这些数组的所有组合;使用下面的答案之一。最后,将每个结果数组与
内爆
连接起来,得到一个字符串数组

$combinations = combinations($array);
$sub = array_map('implode', $combinations);

将方括号中的字符串转换为数组。然后获取所有数组的组合。稍后您将如何处理
sub
s?也许仅仅在正则表达式上下文中使用
$str
就可以复制@barmar,谢谢你的建议,但我并不完全清楚。您建议将字符串拆分为以下数组:$str[0]=“ABCCDF”$str[1]=“G”$str[2]=“H”$str[3]=“IJJ”$str[4]=“K”$str[5]=“L”$str[6]=“M”。。。然后进行排列?我想我可以做arrys,你能给我一些关于排列的建议吗?@user3783243我需要扩展的字符串来搜索这些字符串,例如,我想知道
'DFIJ'
是否符合这个规则
$array = 
    array(array('ABCCDF'),
          array('G', 'H', 'I'),
          array('IJJ'),
          array('K', 'L', 'M'));
$combinations = combinations($array);
$sub = array_map('implode', $combinations);