函数调用的正则表达式,取0或更多整数

时间:2017-10-29 07:06:35

标签: javascript java regex

我正在寻找一些正则表达式帮助解析函数名称及其参数。

f()有效并且没有参数 - 应该返回[<f,[]>](函数名称和参数数组的数组)。

f(); g()是两个函数f和g,没有参数 - 应该返回[<f,[], <g,[]>]

f(1,2) - 带有两个参数的函数f - 应返回[<f, [1,2]>]

f(1,2); g(1)应该返回[<f, [1,2]>; <g, [1]>]

所以基本上它是一个以分号分隔的functionName系列(仅限整数/数字类型的一个或多个逗号分隔参数)。

我正在寻找一个使用匹配器方法的正则表达式来实现这一点。

1 个答案:

答案 0 :(得分:1)

你可以使用一些正则表达式,如下所示:

List<String> functions = Arrays.asList("f()", "f(); g()", "f(1,2)", "f(1,2);    g(1)");
String regex = "([a-z]+\\(.*?\\));?";
String regex2 = "([a-z]+)\\((.*?)\\)";
for (String func : functions) {
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(func);
    while (matcher.find()) {
        Pattern pattern2 = Pattern.compile(regex2);
        Matcher matcher2 = pattern2.matcher(matcher.group(1));
        if (matcher2.find()) {
            System.out.println("function name = " + matcher2.group(1) + ", params "
                    + Arrays.asList(matcher2.group(2).split(",")));
        }
    }
}

<强>输出

function name = f, params []
function name = f, params []
function name = g, params []
function name = f, params [1, 2]
function name = f, params [1, 2]
function name = g, params [1]

详细信息:

  • 获取提取函数的第一个正则表达式([a-z]+\(.*?\));?,因为它可以是多个函数,而不是需要循环才能逐个获取(regex demo
  • 第二个正则表达式([a-z]+)\((.*?)\)获取函数名称和括号之间的所有内容(regex demo
  • 因此,当您在括号之间得到所有内容时,您可以使用,进行拆分以获取参数列表