2

私は文字列を持っていますが、数字のみが許可されており、1つ以上のパーセンテージが許可されています

したがって、私の正規表現は次のようになります。 、ここで[\d+%]テストできます

Javaの場合、私はそれを変換する必要があります、

public static final String regex = "[\\d+\\%]";

そしてそれをテストするために私はこの関数を使用します

public static final String regex = "[\\d+\\%]";

public boolean validate(String myString){

    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(myString);

    if (!matcher.matches()) {
        return false;
    }else{
        return true;
    }
}

正規表現が機能していません。

public static final String regex = "[\\d+%]";

Javaの長い正規表現をエスケープするための優れたオンラインツールはありますか?

より高度な質問:
%は、文字列に1桁以上含まれている場合にのみ許可されるべきであり、%のみが許可されるべきではありません。そして:aのない% 数字は、桁数が正確に8である場合にのみ許可されます(つまり、1234567は悪いですが、12345678は良いです)

テストケース:

  • 悪い:%(空の文字23b列)、、、、、、、、-17.5%5a11234567
  • 良い12345678、、、23%_1%53%53%7
4

1 に答える 1

4

文字列があり、数字のみが許可されており、1つ以上のパーセンテージが許可されているため、正規表現は次のようになります。[\d+%]

+実際には、これは数字、a、またはの1文字に一致し%ます。

あなたが言葉で説明したものと一致させるには、次のようなものが必要です。

  [\d%]*\d[\d%]*

これは、オプションのパーセント記号を使用して少なくとも1桁を含む文字列と一致します。%文字はメタ文字ではないため、正規表現でエスケープする必要はないことに注意してください。次のすべてに一致します。

  0
  00
  %0
  0%0
  00%
  0%0%0
  0%%0

%などですが、数字や文字以外の文字を含む文字列だけではありません%


Javaの長い正規表現をエスケープするための優れたオンラインツールはありますか?

私は1つを知りません。しかし、エスケープは、正規表現が機能しなかった理由ではありませんでした。


より高度な質問:%は、文字列に1桁以上含まれている場合にのみ許可されるべきであり、%のみが許可されるべきではありません。

上記の私の正規表現はそれを行っていると思います。そして、記録のために、Java文字列リテラルとしてどのように見えるかを次に示します。

"[\\d%]*\\d[\\d%]*"

正規表現にTAB、NL、CRなどの文字が含まれていない限り、各個人\を。に置き換えるだけで十分\\です。

于 2012-10-31T12:34:50.207 に答える