2017-03-22 11 views
2

私は方程式ソルバーのために使用している正規表現を否定する標準の先読み方法を試しました。問題は、それが機能していないということです。私は、乗算のthe2インスタンスを隔離したい 1 + 2×3×4 +複雑な正規表現を否定する

は、サンプル方程式を考えます。私は{1+、+}を1つの配列に、{2x5、3x4}をもう1つの配列に入れたい。

split( "\\ d + x \\ d")を使用して最初の配列を取得しましたが、その正規表現をネゲートしてもう一方の配列を取得できませんでした。お時間をいただき、ありがとうございました!

+0

@LutzLどのようにこの質問への答えは直接関係ありますか? –

答えて

0

私は、乗算項を生成する1ライナーは考えられませんが、マッチャーを使用してそれらを抽出するのはかなり簡単です。

String input = "1+2x5+3x4"; 
// you already found a way to identify the non multiplication terms 
String[] first = input.split("\\d+x\\d+"); 

String pattern = "(\\d+x\\d+)"; 
Pattern p = Pattern.compile(pattern); 
Matcher m = p.matcher(input); 
List<String> second = new ArrayList<>(); 
while (m.find()) { 
    second.add(m.group(1)); 
    System.out.println(m.group(1)); 
} 

一般的に、あなたはおそらく、複雑な算術式を処理するためにパーサを使用する必要があることに注意してください。そのパーサーは内部的に正規表現を大量に使用することがありますが、正規表現だけを使用すると、ネストされた括弧を取得するとうまく動作しません。

出力:

2x5 
3x4 
+0

こんにちはTim、おかげで束!私はまだパーサを見ていないが、今は間違いなくそうするだろう。基本的な操作順序を定義したら、かっこを処理するために再帰的に計画していました。私はこれを撃つだろう! – Joel