2013-02-08 124 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