2017-03-14 15 views
3

私はJava正規表現を初めて使用しています。私は答えを見つけることができませんでした。特定のパターンがいくつかの文字の前にあるかどうかを確認する方法?

これは私の正規表現です:-?\\d*\\.?\\d+(?!i) と私はそれをではなく、例えば、私は、このメソッドは0.0を返したいが、それは55.0を返し続ける

private static double regexMatcher(String s, String regex) { 
    Pattern pattern = Pattern.compile(regex); 
    Matcher matcher = pattern.matcher(s.replaceAll("\\s+", "")); 

    if (!matcher.find()) { 
     return 0; 
    } 
    String found = matcher.group(); 

    return Double.parseDouble(matcher.group()); 

} 

String 551i

は、これが私の方法です。

私は間違っていますか?

答えて

1

全体桁ドット桁マッチングパターンにバックトラック回避する原子群を使用する:

"-?(?>\\d*\\.?\\d+)(?!i)" 

Java demoregex demoを参照してください。

+0

もう1つ手伝ってもらえますか?なぜこの正規表現は '-0.501'を** - 0 **として認識しますか?そしてどうすればそれをしないのですか? –

+0

正規表現は、期待通りの数字に一致します(https://regex101.com/r/8g0vAL/1)。私は[reproできません](http://ideone.com/s7Lto0)。 –

+0

申し訳ありませんが、私は '-0.501i'を** - 0 **と指定しましたか?私の正規表現では、迅速な解決策はありますか? –

関連する問題