正規表現パズル: String.matches() が誤動作するのはなぜですか?
次のコード スニペットの目的は、正規表現を使用して次のことを行うことです。小文字のみを含む単語を識別します:
String[] words = {"{apf","hum_","dkoe","12f"}; for(String s:words) { if(s.matches("[a-z]")) { System.out.println(s); } }
ただし、印刷する代わりに「dkoe」は予期された結果ですが、コードは出力を生成しません。なぜこのようなことが起こるのでしょうか?
String.matches() の落とし穴
原因は String.matches() メソッドの誤解にあります。他の言語の一見類似したものとは異なり、Java のmatches() は、入力文字列全体を指定された正規表現と照合しようとします。これは、式が文字列の一部だけではなく文字列全体と一致する必要があることを意味します。
指定されたコードでは、正規表現 [a-z] は任意の小文字 1 文字と一致します。したがって、matches() が true を返すには、入力文字列全体がちょうど 1 つの小文字で構成されている必要があります。ただし、どの入力単語もこの条件を満たしていません。
解決策: Pattern と Matcher の導入
この問題を解決するには、Pattern オブジェクトと Matcher オブジェクトを使用することをお勧めします。これにより、正規表現一致の制御と柔軟性が向上します。
Pattern p = Pattern.compile("[a-z]+"); Matcher m = p.matcher(inputstring); if (m.find()) // match found
文字クラス内で量指定子を使用することで、次のことが保証されます。この式は 1 つ以上の小文字を含む文字列と一致し、単語「dkoe」を正しく識別します。
以上がJava の「String.matches()」が小文字の単語を見つけられないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。