你好其他程序员
我有一个小问题,似乎无法找到合适的答案。
所以我的想法是我从我那里得到一个带有预定义函数的String。 它看起来像这样:
CommunicationID
当我只使用get时,它会变得更复杂甚至更简单。
我想要做的是将每个函数拆分为其参数,这也可以是函数或普通的字符串或数字。
我的想法是我可以使用正则表达式来做到这一点,但我似乎找不到合适的东西。
到目前为止我的正则表达式:
String expression = "map(%set@IDENTIFIER%, get(%key@Longitude:Number%), get(%key@Latitude:Number%), map(%set@IDENTIFIER%, get(%key@Longitude:Number%), get(%key@Latitude:Number%)))";
我做的是
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]+)*\\%,*)+\\))";
我的输出是这样的:
方法得到
参数%key @ Longitude:Number%
类型:编号
方法得到
参数%key @ Latitude:Number%
类型:编号
方法得到
参数%key @ Longitude:Number%
类型:编号
方法得到
参数%key @ Latitude:Number%
类型:编号
但我想念的是功能图及其所有参数。
希望我的意思是可以理解的。
答案 0 :(得分:3)
尝试这种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;
结果是
答案 1 :(得分:0)
Java正则表达式不支持递归,这是正则表达式中任意嵌套括号匹配所必需的。即使它确实如此,最好的解决方案是实际解析表达式。
如果您不想使用正确的解析器,那么您应该对其进行标记。将其拆分为函数启动,参数和函数结束的流,然后添加逻辑来处理该流。