2014-09-04 98 views
0

我有一個字符串,表示我試圖解析的函數調用。每個參數可以是另一個函數調用,也可以是一個單詞。我想編寫一個算法來檢索名稱並拆分參數。如何分割函數調用參數

class FunctionCall{ 
    String name; 
    String[] args; 
} 

function parseFunction(String func){ 
    FunctionCall fc = new FunctionCall(); 
    fc.name = func.subString(0,func.indexOf("(")) 
    fc.args = ??? 
} 

函數調用可能看起來像func1(func2(arg1, arg2),func3(func4(arg3)),arg4),我想String[] args包含func2(arg1, arg2)func3(func4(arg3))arg4

我不認爲這是可能的正則表達式由於函數調用的遞歸性質。

我用Java編寫代碼,但其他語言都可以。

回答

0

看來,我已經找到了答案描述here

我需要逐個解析人物,並計算開括號的數量。如果在沒有開括號時遇到逗號,那麼我應該在這一點上分開。

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

您可以試試這個。它與當前輸入匹配。可能需要更多的輸入模式來測試。

查看演示。

http://regex101.com/r/pP3pN1/31