-1
("^\d{1,15}(\.\d{1,2})?$") 

これは私が使用しようとしている正規表現ですが、Java は構文エラーを出します。

^(?!(?:0|0\.0|0\.00)$)[+]?\d+(\.\d|\.\d[0-9])?$

これは、00.00、124.03、0.13 などの数値には適していますが、0.0 や 0 には適していません。

次の種類の数値を受け入れるように正規表現を変更してください。

123456.00,
12415366.88,
0.23,
0,
0.00,
0.0,
432547,

つまり、0 と小数点以下 2 桁までを含む正の数のみ

4

3 に答える 3

1

最初の正規表現が最適ですが、Java では二重のバックスラッシュを使用してリテラルのバックスラッシュをコーディングする必要があることに注意してください。

str.matches("\\d{1,15}(\\.\\d{1,2})?") 

を使用すると、 true を返すためにとにかく式が文字列全体に一致する必要があるため、先頭または末尾matches()の は必要ないことに注意してください。^$

etc は有効な\dのに対し、 は有効なエスケープ シーケンスではないため、構文エラーが発生した可能性があります。\n

于 2013-08-23T05:19:34.930 に答える
1

パブリック クラス RegexTest {

public static void main(String[] args) {
    String regexExpression = "([0-9]+[.]?|[0-9]*[.][0-9]{0,2})";

    // True examples
    System.out.println("123456.00".matches(regexExpression));

    System.out.println("12415366.88".matches(regexExpression));

    System.out.println("0".matches(regexExpression));

    System.out.println("0.0".matches(regexExpression));
    System.out.println("0.00".matches(regexExpression));
    System.out.println("432547".matches(regexExpression));

    System.out.println("00.00".matches(regexExpression));

    System.out.println("124.03".matches(regexExpression));

    // False examples
    System.out.println("124.033".matches(regexExpression));
    System.out.println("-124.03".matches(regexExpression));
}

}

于 2013-08-23T05:12:35.277 に答える
0

ここで正規表現を使用する理由がわかりません。この方法で試すことができます

  String num="253.65";
    try{
        double d=Double.parseDouble(num);
        if(d==0.0){
            System.out.println("valid");
        }else if(d>0&&(num.split("\\.")[1].length()==2)){
            System.out.println(num+" is valid");
        }else{
            System.out.println(num+" is invalid");
        }
    } catch (NumberFormatException e){
        System.out.println(num+"is not a valid number");
    }

ライブデモ

于 2013-08-23T05:03:21.980 に答える