java - 如何将运算符的逻辑表达式拆分为分隔符,同时将它们保留在结果中?

标签 java regex logical-operators

类似于this question我想拆分我的逻辑表达式 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]+

你可以找到一个例子here on 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));
    }
 }

关于java - 如何将运算符的逻辑表达式拆分为分隔符,同时将它们保留在结果中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60054933/

相关文章:

java - 创建随机数组方法

java - 使用 htmlunit (Java) 单击链接

javascript - JQuery .attr 在 Chrome 中不起作用

正则表达式匹配 1+ 字符,但不是 500 字符

javascript - 逻辑&&运算符

java - 从java http服务器获取全局IP地址

java - 如何在 Java 中从 X509Certificate 中提取 CN - 不使用 Bouncy CaSTLe?

java - 如何动态设置@Validate注释的mask选项的值

matlab - 如何在一个等价语句中包含多个条件?

r - 当列包含因子时,使用OR子集数据框