Php 从字符串获取带有正则表达式的数组

Php 从字符串获取带有正则表达式的数组,php,arrays,regex,Php,Arrays,Regex,我得到的php数组如下所示: array(3) { [0]=> string(12) "server[edit]" [1]=> string(14) "server[create]" [2]=> string(12) "user[delete]" } 我想将其转换为不同的数组-例如,一个名为server的数组,其中包含“edit”和“create”,另一个数组是“user”,其中包含“delete” 正确的模式是什么 谢谢你的帮助 与其对整个数组尝试正

我得到的php数组如下所示:

array(3) {
   [0]=> string(12) "server[edit]" 
   [1]=> string(14) "server[create]" 
   [2]=> string(12) "user[delete]" 
}
我想将其转换为不同的数组-例如,一个名为server的数组,其中包含“edit”和“create”,另一个数组是“user”,其中包含“delete”

正确的模式是什么


谢谢你的帮助

与其对整个数组尝试正则表达式,不如尝试对每个单独的值进行匹配。以此为例

$array = array(
        'server[edit]',
        'server[create]',
        'user[delete]',
        'dsadsa'
);

$newArray = array();

foreach($array as $value)
{
        preg_match("~^(\w+)\[(\w+)\]$~", $value, $matches);
        if(count($matches))
        {       
                $key = $matches[1];
                if(!isset($newArray[$key]))
                        $newArray[$key] = array();

                $newArray[$key][] = $matches[2];
        }
}

var_dump($newArray);

为什么你认为正则表达式是这项工作的工具?这是我的第一个想法,所以可以过滤“服务器”和操作“编辑”或“创建”(但我不知道如何)-是否有其他解决方案?看起来
^(\w+)\[(\w+)\]$
非常适合。但将其拆分为不同的顶级数组对我来说似乎是个坏主意。您的
仅适用于
\]
,反斜杠放错了位置。我想你是想写
~^(\w+)(:\[(\w+)\])?$~
@lucastrezesniewski是的,你说的对吗?和\。我不想要?:但是,因为我希望第二个捕获是插入到数组中的值。我想这就是OP的目标,这就是为什么我建议
(?:
而不是
。但是现在我看到你完全删除了
。@Lucastzesniewski抱歉,我可能对我的正则表达式有些生疏,但不是吗?:这意味着捕获括号不会在$matches中返回,因此$matches[2]将返回null或不被定义?@Gareth不,它只是不算作捕获组,
$matches[2]
仍将返回相同的内容。对于一个组,总是返回
null
是没有意义的。