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 に答える