2013-02-08 88 views
0

我有串PHP函数参数数组

$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);这是最好的。

+2

基本上你在代码中使用'eval'任何时候,你做了什么。 '$ argsInString'从哪里来,你到底会用什么输出? – Mike

+0

是的,你有正确的评价,我尝试写正则表达式,但我表示。与eval我尝试使用php编译器,但这个faild也。 $ argsInString来自框架,如果翻译模板,这是定义变量。 – h4kuna

+0

这个框架对于这些字符串是否有某种内置的解析方法? – Mike

回答

1

这里有一个正则表达式,将样本的工作是这样的:

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

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

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

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

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

+0

非常非常好,谢谢。我忘了一个字符串$ argsInString ='“%s,hello”,\'%s,world \',$ foo;像http://regex101.com/r/wF0xH8 – h4kuna

+0

很好玩的,欢迎您 –

+0

** **凉爽,非常感谢你 – h4kuna