类似于这个问题,我想拆分我的逻辑表达式A >= 10 AND B <= 20 OR C in ('3', '4')
A
、>=
、10
、AND
、B
、<=
、20
、OR
、C
、in
、('3', '4')
怎么能做到呢?
我正在尝试遵循方式(但这似乎不是优雅的方法(
String orRules[] = inputRule.split(" OR ");
for (int i = 0; i < orRules.length; i++) {
String andRules[] = orRules[i].split(" AND ");
for (int j = 0; j < andRules.length; j++) {
String[] result = andRules[j].split("(?<=[-+*/])|(?=[-+*/])");
System.out.println(Arrays.toString(result));
}
orRules[i] = String.join(" AND ", andRules);
}
output = String.join(" OR ", orRules);
你需要的正则表达式是这样的:
(.*)|[^s]+
您可以在 regex101.com 上找到一个带有解释的示例。
在Java中,你必须匹配正则表达式,不要在上面分裂。 使用周围的括号((.*)|[^s]+)+
创建组,如以下示例所示:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
...
public static void main(String[] args) {
String ex = "A >= 10 AND B <= 20 OR C in ('3', '4')";
String regex ="(\(.*\)|[^\s]+)+";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(ex);
while(m.find()) {
System.out.println(m.group(1));
}
}