捕获重复子模式

时间:2013-04-29 12:18:42

标签: php regex

说我有以下字符串:Func(param1, param2)具有未知数量的参数 我想获得以下数组:

Array(
    [0] => Func(param1, param2),
    [1] => Func
    [2] => param1,
    [3] => param2,
    ...
)

我试过了:

$str = 'Func(param1, param2)';
preg_match('/^([a-z]+)\((?:([a-z0-9]+)\s*,?\s*)*\)$/i', $str, $matches);
print_r($matches);

这就是输出:

Array
(
    [0] => Func(param1, param2)
    [1] => Func
    [2] => param2
)

捕获params的子模式仅捕获最后一个参数。我希望它能捕获所有参数。

有什么想法吗?

修改
我知道我可以捕获所有的参数,然后使用爆炸。但这不是我的问题 我想知道如何使用正则表达式。

2 个答案:

答案 0 :(得分:0)

这应该这样做:

$str = 'Func(param1, param2, param32, param54, param293, par13am, param)';
preg_match_all("/(.*)[\(|\](.*)[,|\)]/U", $str, $match);

print_r($match[1]);
//output: Array ( [0] => Func [1] => param1 [2] => param2 [3] => param32 [4] => param54 [5] => param293 [6] => par13am [7] => param )

答案 1 :(得分:-1)

您可以一次获取所有参数,然后使用explode从该字符串中获取数组:

$str = 'Func(param1, param2)';
preg_match('/^([a-z]+)\(([a-z0-9\,\s]+)\)$/i', $str, $matches);
print_r($matches);

$params = explode(',', str_replace(' ', '', $matches[2]));

print_r($params);