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

问题描述:

我正在寻找一些正则表达式帮助来解析函数名称及其参数。函数调用的正则表达式,需要0或更多的整数

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]>]

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

我正在寻找一个正则表达式与匹配器的方法来得到这个工作。

+0

遗憾没有意识到,得到了公布名单。那里有格式化问题。不明白-1的s的车库,虽然 – rOrlig

+0

所以要明确,你明确地忽略了像f(g(1)),f(“1,1”),f((1,1) )','f(.. args)'等等? –

+1

http://idownvotedbecau.se/noattempt/ – Andreas

你可以使用一些正则表达式与模式是这样的:

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]+)\((.*?)\)得到一个获得的功能,每一个东西的名字不止一个功能括号()
  • 之间因此,当你括号之间的每一件事情,你可以用,组所得到的参数
+0

谢谢,这真的很不错。一个问题是,函数内部的参数只是数字类型。我可以做一个Integer.parseInt()来消除字符串,但有一种更优雅的方式。 – rOrlig

+0

你可以完成并使用正则表达式,所以你可以检查'if(param.matches(“\\ d +”)){'以消除字符串;) –

+1

谢谢:) ..我曾经考虑过,如果我应该使用某种词法分析器&解析器逻辑,使解决方案更加健壮。这应该工作,除非需求变化很大。 – rOrlig