次のパターンに一致させようとしている間:
String regex_2 = "w+ w+ [d-]{10}";
System.out.println("Dev Anand 98-76-543210".matches(regex_2));
出力として取得false
します。何故ですか ?
数字を照合する場合は、文字クラスでは\d
なく、が必要です。同様に、 「単語」文字を照合する代わりにd
必要です。最後に、数字は10文字ではなく12文字(10桁と2つのダッシュ)です。まとめると、次のように機能します。\w
w
String regex_2 = "\\w+ \\w+ [\\d-]{12}";
System.out.println("Dev Anand 98-76-543210".matches(regex_2));
\
( Java文字列リテラルの一部である場合は2倍にする必要があることに注意してください。これにより、単一\
の文字列が文字列に含まれるようになります。文字リテラルについても同じことが言えます。'\\'
は単一\
文字です。)
事前定義された文字クラス\
を示すにはsを使用する必要があります。これは、Java文字列のエスケープ文字であるため、文字列リテラルにsが必要です。\\
\
String regex_2 = "\\w+ \\w+ [\\d-]{10}";
さらに、パターンの一部だけでなく、パターン全体が一致する場合String#matches(String)
に返されるため、別のメソッド(など)を使用する必要があります。true
Matcher#find()
Pattern.compile("\\w+ \\w+ [\\d-]{10}")
.matcher("Dev Anand 98-76-543210")
.find(); // true
または別のパターン:
"Dev Anand 98-76-543210".matches("\\w+ \\w+ [\\d-]{12}"); // true
これを試して:
String regex_2 = "\\w+ \\w+ [\\d-]{12}";
あなたはそれらのうちの10個だけを一致させていましたが、それらの2つを含める-
と12個あります