从昨天开始我就一直在思考这个问题,希望得到一些指点。我将收到 Where Query Statements 作为输入,
(((REVENUE_M2-REVENUE_M1)/REVENUE_M1)*100 >= 10 AND ((REVENUE_M2-REVENUE_M1)/REVENUE_M1)*100 < 50) OR CLASS_DENOM = 2001
我正在标记如下所示的语句,
[(((REVENUE_M2-REVENUE_M1)/REVENUE_M1)*100, >, =, 10, AND, ((REVENUE_M2-REVENUE_M1)/REVENUE_M1)*100, <, 50), OR, CLASS_DENOM, ==, 2001]
这是我使用的正则表达式 - ([^\"]\S*|\".+?\")\s*
- 它将识别以除 " \S*
以外的其他内容开头的标记,后跟零个或多个非空格字符。
但现在从第一个标记开始,我试图确定公式 ((REVENUE_M2-REVENUE_M1)/REVENUE_M1)*100
而不包括用于优先级的 (
,这就是我陷入困境的地方。这是我的代码,
List tokenizer(String str){
List<String> tokens = new ArrayList<>();
Matcher m = Pattern.compile("([^\"]\\S*|\".+?\")\\s*").matcher(str);
while (m.find())
tokens.add(m.group(1));
return tokens;
}
void parser(String str) {
for(String token : tokenizer(str)) {
if(token.matches("regex to identify mathematical formula"))
//parse the formula
}
}
所以我的问题是我应该如何构建正则表达式,以便它仅识别 ((REVENUE_M2-REVENUE_M1)/REVENUE_M1)*100
而不包括用于优先级的 (
?