我正在寻找一些正则表达式帮助解析函数名称及其参数。
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系列(仅限整数/数字类型的一个或多个逗号分隔参数)。
我正在寻找一个使用匹配器方法的正则表达式来实现这一点。
答案 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),
进行拆分以获取参数列表