2016-12-13 24 views
0

私は文字列を解析しているので、数値に変換する必要があります。しかし、例えば0で除算が含まれている場合、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

+1

誰かが '2 /(1-1)'を書くとどうなりますか?あなたはそれをどうやって見つけますか? – byxor

+7

'x /(1 - 1)'についてはどうですか? RegExはこれの選択肢ではありません。評価して例外を探すのはどうですか? –

+0

私の文字列では既に私はそれらの式を計算しているので、私は私の例で書いたようなスコープなしの数値と演算しか持っていません –

答えて

0

による除算が含まれている場合、これは仕事をしなければならない文字列に一致するように、このタスクのための正規表現を作成することはできません。.*\/0([^.]|$|\.(0{4,}.*|0{1,4}([^0-9]|$))).*ここ あなたがそれで遊ぶことができます。https://regex101.com/r/lwAVan/1

+0

これは' 1/0'にマッチしません。 –

+0

ありがとう、私はそれらのケースにも一致する答えを編集しました。 –

+0

あなたの答えをありがとう、それは動作しますが、今正しくは、たとえば "10/0.01 + 5"は正しいですが、 "10/0.001 + 5"は間違っています –

0

それは少し奇妙だが、あなたが本当にこれを実行しなければならない場合は、次のパターンのようなものは動作するはずです:

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

あなたの要件はあまり明確ではないので、それがどれほど寛容である必要があるかを言うのは難しいです。たとえば、このパターンでは、除算演算子と除数の間に空白ができません。また、常に数字の後にテキストがあることを前提としています。数字は常にJava文字列リテラルとして書かれている限り、安全な前提です。

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

これはこれまでのところ最高の答えです。正規表現は私に混乱のように見えます。 – byxor

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の場合、結果は "Infinity"になります。

+0

私はこのスクリプトマネージャを使用していますが、メソッドevalを実行する前に、文字列に0で除算が含まれているかどうかを確認したいと思います。このようなタスク:))と私はスコープなしの数字と操作だけを含む文字列を持っているので、1 /(1-1)、1 /(5 + 5-10)、1 /(2 * 2 -2^2) –

+0

'sin()cos()sqrt()log()pow()PI ...'これらはすべて同様に有効です – Kent

関連する問題