我有字符串
$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);这是最好的。
答案 0 :(得分:1)
这是一个可以处理这样的样本的正则表达式:
/(?: ?)([^,]*\(.*?\)|.+?)(?: ?)(?:,|$)/
在此解释演示:http://regex101.com/r/hK6nN0
更新:
还匹配包含,
的单引号和双引号字符串,如:
"%s, hello", \'%s, world\', 5
<强> /(?: ?)([^,]*\(.*?\)|[^,]*'[^']*'|[^,]*"[^"]*"|.+?)(?: ?)(?:,|$)/
强>
在此解释演示:http://regex101.com/r/tD3cN9