2014-09-04 70 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