9

私はこのように試しましたが、falseを出力します、助けてください

String inputString1 = "dfgh";// but not dFgH
String regex = "[a-z]";
boolean result;

Pattern pattern1 = Pattern.compile(regex);
Matcher matcher1 = pattern1.matcher(inputString1);
result = matcher1.matches();
System.out.println(result);
4

5 に答える 5

21

あなたの解決策はほぼ正しいです。正規表現は"[a-z]+"、量指定子を含める必要があります。これは、単一の文字ではなく、1 つ以上の小文字に一致することを意味します。英語のアルファベットだけでなく、Unicode の任意の小文字に一致する非常に正しい解決策は次のとおりです。

"\\p{javaLowerCase}+"

さらに、はるかに少ないコードでこれを実現できることに注意してください。

System.out.println(input.matches("\\p{javaLowerCase}*"));

(ここでは代わりに * 量指定子を使用しています。これはゼロ以上を意味します。目的のセマンティクスに従って選択してください。)

于 2012-11-13T17:24:52.157 に答える
5

1 文字だけをチェックしていることを除いて、ほぼ完了です。

String regex = "[a-z]+";

a上記の正規表現は、入力文字列に からまでの任意の数の文字が含まれるかどうかをチェックしますz

正規表現で数量詞を使用する方法について読む

于 2012-11-13T17:24:45.970 に答える
3

このパターンを使用します:

String regex = "[a-z]*";

現在のパターンは、テストされた文字列が 1 文字のみの場合にのみ機能します。

文字列が小文字であるかどうかを実際にテストするのではなく、外部に文字が含まれていないかどうかをテストします[a-z]。これは、 のような小文字の文字列に対して false を返すことを意味します"àbcd"。Unicode の世界での正しい解決策は、Character.isLowercase()関数を使用して文字列をループすることです。

于 2012-11-13T17:24:55.183 に答える
2

そのはず

^[a-z]+$

^文字列の先頭です

$文字列の終わりです

[a-z]+1 個から多数の小さな文字に一致します

*0 から多くの文字に+一致するもの、1 から多くの文字に一致するものなどの数量化を使用する必要があります。

于 2012-11-13T17:25:59.283 に答える
0

なぜ正規表現を気にするのですか?

String inputString1 = "dfgh";// but not dFgH
boolean result = inputString1.toLowerCase().equals( inputString1 );
于 2012-11-13T17:39:06.220 に答える