Java 未知方程的正则表达式

Java Regular Expressions for unknown equation

我正在尝试使用单行,没有 space 方程作为输入,但我是正则表达式的新手。我知道我代码中的正则表达式是完全错误的,但这是解释我正在尝试做的事情的最佳方式。一些示例情况是 12+2=14、-4+54=50、5*8=40、8--2=10、2-4=-6 等。如果有人能告诉我,我也将不胜感激如何在正则表达式中使用 OR,因为我找不到任何信息。

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    String input = sc.next();

    String re1="((-)(\d+))|(\d+)";    // -int1 or int1
    String re2="((\+) | - | (\*))";   //+ or - or *
    String re3="((-)(\d+))|(\d+)";    // -int2 or int2
    String re4="(=)";                   // Equals
    String re5="((-)(\d+))|(\d+)";    // -int3 or int3

    Pattern pattern = Pattern.compile(re1+re2+re3+re4+re5,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
    Matcher matcher = pattern.matcher(input);

    if (matcher.find()) {

        String int1 = matcher.group(2);
        String op1 = matcher.group(3);
        String int2 = matcher.group(4);
        String op2 = matcher.group(5);
        String int3 = matcher.group(6);
        System.out.println(int1 + " " + op2 + " " + int2 + " " + op2 + " " + int3);
    }
}

首先,我建议使用像 http://www.regexr.com/ 这样的网站来实时测试您的正则表达式。

然后,您可以使用可选量词代替 "OR",例如([-]?\d+) 匹配任何负数和正数: [-]是一个包含负号的集合,后面的?表示这个集合可以出现0次或一次(这就是为什么它被称为可选量词),然后\d+表示一个数字出现一次或更多次。

要指定运算符,您可以使用集合 [+\-*\/]。请注意,在这种情况下,- 必须由 \ 转义,因为通常在 [a-n] 这样的集合中找到它代表 an 之间的范围.但在我们的例子中,它只是一组的一部分。

所以,把这两个部分结合起来,你可以得到一个像这样的正则表达式:([-]?\d+)([+\-*/])([-]?\d+)=([-]?\d+)

请注意,您必须在 Java 字符串中对 \ 进行转义(我在这里没有这样做,因为它主要是关于正则表达式)。