1

假设我有以下字符串: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
)

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

有任何想法吗?

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

4

2 回答 2

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 )
于 2013-04-29T12:26:47.207 回答
-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);
于 2013-04-29T12:26:01.867 回答