函数调用的正则表达式,需要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]>]
所以基本上它是一个分号分隔的函数名称系列(仅限一个或多个逗号分隔的整数/数字类型参数)。
我正在寻找一个正则表达式与匹配器的方法来得到这个工作。
答
你可以使用一些正则表达式与模式是这样的:
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]+)\((.*?)\)
得到一个获得的功能,每一个东西的名字不止一个功能括号() - 之间因此,当你括号之间的每一件事情,你可以用
,
组所得到的参数
遗憾没有意识到,得到了公布名单。那里有格式化问题。不明白-1的s的车库,虽然 – rOrlig
所以要明确,你明确地忽略了像f(g(1)),f(“1,1”),f((1,1) )','f(.. args)'等等? –
http://idownvotedbecau.se/noattempt/ – Andreas