0

我有字符串

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

4

1 回答 1

1

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

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

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

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

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

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

于 2013-02-08T08:02:22.583 回答