java - 使用 Java 正则表达式查找具有任意数量嵌套的函数

标签 java regex

各位程序员大家好

我有一个小问题,似乎找不到正确的答案。

所以我的想法是我从我这里得到一个带有预定义函数的字符串。 它看起来像这样:

 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;

结果是

result

关于java - 使用 Java 正则表达式查找具有任意数量嵌套的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35089204/

相关文章:

Windows 7 上的 Java 7 64 位 : how to switch java versions

javascript - 找到了许多正则表达式,但在我的 javascript 中尝试它们失败了

java - java中的正则表达式

java - 在数组列表中搜索最常见的字符串

Java :How to replace any space (not whitespace), 只是空格,后面没有跟另一个没有空格的空格

Java - Spring 注入(inject)正则表达式 - 非法字符 - & 符号

ruby - 使用 Ruby 和正则表达式就地更改 XML 数据

java - android 互联网连接可用性

java - 非阻塞 PipedStreams?

java - JPA 查询验证数据库中是否存在输入