除以 0 的正则表达式

Regular expression for division by 0

我正在解析字符串,然后需要将其转换为数字。但是如果它包含除以 0 例如

String str1 = "1+2+3-5/0+4+6"
String str2 = "1+2+3-4/0.000 +4+6"

我必须写在这个字符串中"Division by 0 error"。我的正则表达式看起来像这样,但它是错误的。

String REGEXP_DIV_BY_0 = "(.*)([/0\.0{1,4}](^[1-9]+))(.*)";

我无法为此任务创建正则表达式,以匹配包含除以 0 的字符串。

这应该可以完成工作:.*\/0([^.]|$|\.(0{4,}.*|0{1,4}([^0-9]|$))).* 在这里你可以尝试一下:https://regex101.com/r/lwAVan/1

这有点奇怪,但如果你真的必须这样做,那么类似下面的模式应该可以工作:

0\.0{1,4}\D|/0[^\d.]

由于您的要求不是很明确,所以很难说它需要多宽容。例如,此模式不允许在除法运算符和除数之间使用 white-space。它还假设数字后面总会有一些文本,只要它总是写成 java 字符串文字,那么这是一个安全的假设。

我愿意:

/0+(?:\.?0*)?(?!\d)

解释:

/       : a slash (escape it if necessary)
0+      : 1 or more 0
(?:     : non capture group
  \.?0* : an optional comma followed by 0 or more 0's
)?      : end group (optional)
(?!\d)  : negative lookahead, assume there're no more digit followed the 0's

regex 不是评估表达式的正确方法,有太多情况,例如 1/0, 1/(1-1), 1/(5+5-10), 1/(2*2-2^2)....

你可以选择 ScriptEngineManager:

    String str1 = "555/0";      
    ScriptEngineManager mgr = new ScriptEngineManager();
    ScriptEngine engine = mgr.getEngineByName("js");
    try {
        System.out.println(engine.eval(str1));
    }
    catch (ScriptException e) {
        e.printStackTrace();
    }

如果有 /0 的情况,结果将是“Infinity”。