如何拆分函数调用的参数

时间:2014-09-04 03:53:33

标签: java regex string

我有一个表示我正在尝试解析的函数调用的String。每个参数可以是另一个函数调用,也可以是单个单词。我想写一个将检索名称的算法,并拆分args。

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编写代码,但其他语言也没问题。

2 个答案:

答案 0 :(得分:0)

似乎我找到了here

所描述的答案

我需要逐个解析字符,并计算左括号的数量。如果我没有打开括号时遇到逗号,那么我应该分开这一点。

答案 1 :(得分:0)

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

你可以尝试这个。它匹配当前的输入。可能需要更多的输入模式来测试。

参见演示。

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