字符串到数组的php函数参数

时间:2013-02-08 04:43:08

标签: php function parsing arguments

我有字符串

$argsInString = '"%s hello", \'%s world\', $foo->bar("anything", array(\'foo\' => 5 , \'bar\' => $a)),5, foo($s) ,$foo';

我希望像这样转换为数组:

$argsInArray = array('"%s hello"', '\'%s world\'', '$foo->bar("anything", array(\'foo\' => 5 , \'bar\' => $a))', '5', 'foo($s)', '$foo');

我尝试这样的事情:

eval('$argsInArray = array(' . $argsInString . ');');

但这会执行变量。

你能帮助我如何从$ argsInString创建$ argsInArray吗?

编辑: 如果它成功地编写了一个正则表达式,它会在字符串中使用单引号(')来填充单个参数,那么eval就会如上所述。

或者你可以写正则表达式preg_match_all('...',$ argsInString,$ argsInArray);这是最好的。

1 个答案:

答案 0 :(得分:1)

这是一个可以处理这样的样本的正则表达式:

/(?: ?)([^,]*\(.*?\)|.+?)(?: ?)(?:,|$)/

在此解释演示:http://regex101.com/r/hK6nN0

更新:
还匹配包含,的单引号和双引号字符串,如:
"%s, hello", \'%s, world\', 5

<强> /(?: ?)([^,]*\(.*?\)|[^,]*'[^']*'|[^,]*"[^"]*"|.+?)(?: ?)(?:,|$)/

在此解释演示:http://regex101.com/r/tD3cN9