Php 正则表达式不能完全工作

Php 正则表达式不能完全工作,php,regex,tags,Php,Regex,Tags,我有一个特殊的标签,我用在我的网页。这个标签是这样做的 输入: {{模块:菜单:参数(主菜单,索引)}} 现在的问题是我的正则表达式没有读取第二个参数,所以我无法访问这个参数 这是我的标签,我在{{module:menu:params(mainmenu,index)}} 正则表达式是用来匹配参数的,所以它会将我提供给标记的所有参数都提供给我 输出 现在只读取第一个参数,它给出了这个结果 Array ( [0] => Array ( [0] => mainmen

我有一个特殊的标签,我用在我的网页。这个标签是这样做的

输入:
{{模块:菜单:参数(主菜单,索引)}}

现在的问题是我的正则表达式没有读取第二个参数,所以我无法访问这个参数

这是我的标签,我在
{{module:menu:params(mainmenu,index)}}

正则表达式是用来匹配参数的,所以它会将我提供给标记的所有参数都提供给我

输出 现在只读取第一个参数,它给出了这个结果

Array
(
[0] => Array
    (
        [0] => mainmenu
    )

)
需要/预期产出 但是我想要/需要这个

Array
(
[0] => Array
    (
        [0] => mainmenu
        [1] => index
    )

)

我希望我的解释足够好,如果不是,请评论,这样我可以把它说得更清楚。

您可以尝试下面的正则表达式来获得
主菜单
索引
字符串的数组

(?<=\()[^,]*|[^\) ]+(?=\))

你的投入和预期产出是什么?都在那里。为了让你更清楚,我会提供更多的信息。你的问题中有三种不同的输入。代码中的参数是“params(null)”。如果您编辑代码以显示您正在使用的实际输入,那就太好了我得到你想要的/期望的输出…我不是一个真正的专业人士在正则表达式,但链接是惊人的。也许如果我改变我的问题,你会更加理解。我现在只是不知道该做什么,它确实管用!但只有当我只有一个参数时,我才会再次遇到问题。当我输入2个以上的参数时,它只显示2。在你的问题中输入包含2个以上参数的字符串。这是字符串{module:menu:params(mainmenu,index,test)}}在你的最后一条评论中给出了一个,所以不会为你的最后一条添加新的答案:)
Array
(
[0] => Array
    (
        [0] => mainmenu
        [1] => index
    )

)
(?<=\()[^,]*|[^\) ]+(?=\))
<?php
$data = " {{module:menu:params(mainmenu, index)}}";
$regex =  '~\w+[^,\(]+(?=[^()]*\))~';  // this is the solution that works
preg_match_all($regex, $data, $matches);
print_r($matches);
?>
Array
(
    [0] => Array
        (
            [0] => mainmenu
            [1] => index
        )

)