未知方程的 Java 正则表达式

标签 java regex expression

我正在尝试使用单行,无空间方程作为输入,但对正则表达式很陌生。我知道我的代码中的正则表达式是完全错误的,但这是解释我正在尝试做的事情的最佳方式。一些示例是 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+) 匹配任何负数和正数: [-] 是一个包含减号的集合,下面的 ? 表示该集合可以出现零次或一次(这就是为什么它被称为可选量词),那么 >\d+ 表示一个数字出现一次或多次。

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

因此,采用这两部分,您最终会得到如下正则表达式: ([-]?\d+)([+\-*/])([-]?\d+)=( [-]?\d+)

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

关于未知方程的 Java 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29184192/

相关文章:

java - 手动调用PlayFramework自定义错误页面

java - 数据库序列的 Hibernate 映射和 java 代码

regex - 从字符类中排除字符

c# - 如何从表达式属性中获取名称?

LINQ 是否可以通过 LINQ 表达式树获取没有返回类型的方法名称?

c++ - 表达式是在C++中调用函数的结果

java - 继承上的类同义词 : Performance?

java - 为什么jersey2服务部署在tomcat中没有错误,但无法访问资源?

javascript - 正则表达式仅匹配从 a 到 z 的小写字母

javascript - 如何将资源中的正则表达式模式插入到 string.Format 中?