正则表达式除以0

时间:2016-12-13 13:15:13

标签: java regex string regular-language divide-by-zero

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

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

我必须在这个字符串中写“除以0错误”。我的正则表达式看起来像这样,但这是错误的。

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

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

4 个答案:

答案 0 :(得分:1)

我做:

/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

答案 1 :(得分:1)

正则表达式不是评估表达式的正确方法,有太多案例,例如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个案,则结果为&#34; Infinity&#34;。

答案 2 :(得分:0)

这应该可以胜任:.*\/0([^.]|$|\.(0{4,}.*|0{1,4}([^0-9]|$))).* 在这里你可以玩它:https://regex101.com/r/lwAVan/1

答案 3 :(得分:0)

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

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

由于您的要求不是很清楚,因此很难说它需要多么宽容。例如,这种模式不允许除法运算符和除数之间的空白。它还假设在数字之后总会有一些文本,只要它总是写成java字符串文字,那么这是一个安全的假设。