各位程序员大家好
我有一个小问题,似乎找不到正确的答案。
所以我的想法是我从我这里得到一个带有预定义函数的字符串。 它看起来像这样:
String expression = "map(%set@IDENTIFIER%, get(%key@Longitude:Number%), get(%key@Latitude:Number%), map(%set@IDENTIFIER%, get(%key@Longitude:Number%), get(%key@Latitude:Number%)))";
当我只使用 get 时,它可能会更复杂甚至更简单。
我想要做的是将每个函数拆分为其参数,这也可以是函数或普通的字符串或数字。
我想我可以使用正则表达式来做到这一点,但我似乎找不到正确的东西。
到目前为止我的正则表达式:
String regex = "((?<method>map|get)\\((?<parameter>\\%(?<dynamic>set\\@[a-zA-Z_]+|\\$[0-9]+|key\\@[a-zA-Z_]+|set\\@[a-zA-Z_]+)(?<type>:[a-zA-Z]+)*\\%,*)+\\))";
我所做的是
Pattern pa = Pattern.compile(regex);
Matcher m = pa.matcher(expression);
while (m.find()) {
System.out.println("Method " + m.group("method"));
System.out.println("Parameter " + m.group("parameter"));
System.out.println("Type" + m.group("type"));
}
我的输出是这样的:
方法获取
参数 %key@Longitude:Number%
类型:数字
方法获取
参数 %key@Latitude:Number%
类型:数字
方法获取
参数 %key@Longitude:Number%
类型:数字
方法获取
参数 %key@Latitude:Number%
类型:数字
但我怀念的是函数映射及其所有参数。
希望我的意思可以理解。
最佳答案
尝试这个 ANTRL 语法。
grammar Method;
method : ('map' | 'get') '(' element (',' element )* ')';
element : method | parameter;
parameter : '%' dynamic type* '%';
dynamic : 'set' '@' ID | 'key' '@' ID | '$' NUMBER;
type : ':' ID;
ID : [a-zA-Z]+;
NUMBER : [0-9]+;
Skip : [ \t\n\r]+ -> skip;
结果是
关于java - 使用 Java 正则表达式查找具有任意数量嵌套的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35089204/