0

Java 1.6で実行される処理1.0.6を使用しています。次のコードがあります。

Pattern pattern = Pattern.compile("func\((.*),(\-?[0-9\.]*),(\-?[0-9\.]*),(\-?[0-9\.]*)\)");

しかし、それはエラーを与えます:

unexpected char: '('

上で貼り付けた行を強調表示します。\(のような別の文字に問題を変更する#と、ことわざに文句を\-言いunexpected char: '-'ます。正規表現エンジンでリテラルを使用できるはずで、C# で動作します!

4

4 に答える 4

5

バックスラッシュもエスケープする必要があります。

"func\\((.*),(-?[0-9.]*),(-?[0-9.]*),(-?[0-9.]*)\\)"

その文字列式は次のように評価されます。

func\((.*),(-?[0-9.]*),(-?[0-9.]*),(-?[0-9.]*)\)

そして、それはあなたが望んでいたものです。

于 2009-09-26T20:00:23.950 に答える
0

Java の文字列では、\ を前に付けて \ をエスケープする必要があるため、

Pattern pattern = Pattern.compile("func\\((.*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*)\\)");

動作するはずです。

于 2009-09-26T20:01:48.733 に答える
0

"\"と交換したほうがいいと思います"\\"

Pattern pattern = Pattern.compile("func\\((.*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*)\\)");
于 2009-09-26T20:02:49.793 に答える
0

Java では、'(' と '-' はエスケープが必要な文字ではありません。したがって、'(' はエスケープが必要な文字のない '\' を意味するため、エラーが発生します。これに対する解決策は、バックスラッシュもエスケープすることです。 :

Pattern pattern = Pattern.compile("func\\((.*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*),(\\-?[0-9\\.]*)\\)");

Java と C# の両方で RegEx を使用する必要がある場合は、あるプログラムから別のプログラムにスワップするプログラムを作成する必要があります。

于 2009-09-26T20:05:35.653 に答える