0

次のパターンに一致させようとしている間:

String regex_2 = "w+ w+ [d-]{10}";
System.out.println("Dev Anand 98-76-543210".matches(regex_2));

出力として取得falseします。何故ですか ?

4

3 に答える 3

5

数字を照合する場合は、文字クラスでは\dなく、が必要です。同様に、 「単語」文字を照合する代わりにd必要です。最後に、数字は10文字ではなく12文字(10桁と2つのダッシュ)です。まとめると、次のように機能します。\ww

String regex_2 = "\\w+ \\w+ [\\d-]{12}";
System.out.println("Dev Anand 98-76-543210".matches(regex_2));

\( Java文字列リテラルの一部である場合は2倍にする必要があることに注意してください。これにより、単一\の文字列が文字列に含まれるようになります。文字リテラルについても同じことが言えます。'\\'は単一\文字です。)

于 2013-02-24T06:28:53.973 に答える
4

事前定義された文字クラス\を示すには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

http://ideone.com/Bn82cF

于 2013-02-24T06:20:41.223 に答える
0

これを試して:

String regex_2 = "\\w+ \\w+ [\\d-]{12}";

あなたはそれらのうちの10個だけを一致させていましたが、それらの2つを含める-と12個あります

于 2013-02-24T06:30:56.940 に答える