Java 正規表現で真偽値を返す(matches)

Javaの正規表現で真偽値を返すサンプルです。matchesメソッドを使用します。

目次

メソッド matchesメソッド
AB 文字列を指定
[AB] 文字をORで指定
[^A] 文字を否定で指定
[A-C] 文字を範囲で指定
^A 先頭の文字列を指定
A$ 末尾の文字列を指定
c{2} 連続する文字を指定
[0-9]{1,} 数値1桁以上を指定
^[0-9]{5}$ 5桁の半角数値を指定
^[0-9a-f]{5}$ 5桁の半角数値または英字の小文字(a-f)を指定
^[0-9]{3}-[0-9]{4}$ 郵便番号を指定(数値3桁とハイフンと数値4桁)
エスケープ ドット(.)を文字として指定(エスケープ)

matchesメソッド

public boolean matches(String 正規表現のパターン)
  • 正規表現のパターンで文字列を検索します。
  • 一致した場合、trueを返します。
  • 一致しなかった場合、falseを返します。
  • 正規表現の構文が無効な場合、PatternSyntaxExceptionを返します。
  • Stringクラスのメソッドです。

文字列を指定

package test1;

public class Test1 {
    public static void main(String[] args) {

    	String a = ".BC";
    	
    	System.out.println("ABC".matches(a));//true
    	System.out.println("ACB".matches(a));//false
    }
}

6行目は、任意の1文字と文字列「BC」を指定しています。
ピリオド(.)は、任意の1文字を表します。

文字をORで指定

package test1;

public class Test1 {
    public static void main(String[] args) {

    	String a = "A[BC]";
    	
    	System.out.println("AB".matches(a));//true
    	System.out.println("AC".matches(a));//true
    	System.out.println("ABC".matches(a));//false
    }
}

6行目は、「A」と、「B」または「C」を指定しています。
10行目は、2文字目までの条件は合致しますが、3文字目があるのでfalseになります。

文字を否定で指定

package test1;

public class Test1 {
    public static void main(String[] args) {

    	String a = "ZZ[^AB]";
    	
    	System.out.println("ZZZ".matches(a));//true
    	System.out.println("ZZA".matches(a));//false
    	System.out.println("ZZB".matches(a));//false
    }
}

6行目は、文字列の3文字目が「A」と「B」以外を指定しています。

文字を範囲で指定

package test1;

public class Test1 {
    public static void main(String[] args) {

    	String a = "A[A-C]C";
    	
    	System.out.println("ABC".matches(a));//true
    	System.out.println("AZC".matches(a));//false
    }
}

6行目は、文字列の2文字目が「A」または「B」または「C」の文字を指定しています。

先頭の文字列を指定

package test1;

public class Test1 {
    public static void main(String[] args) {

    	String a = "^AB.";
    	
    	System.out.println("ABC".matches(a));//true
    	System.out.println("AZC".matches(a));//false
    }
}

6行目は、先頭が「AB」の文字を指定しています。
文字を否定で検索する正規表現と似ていますが、こちらは角かっこ([])がありません。

末尾の文字列を指定

package test1;

public class Test1 {
    public static void main(String[] args) {

    	String a = ".BC$";
    	
    	System.out.println("ABC".matches(a));//true
    	System.out.println("AZC".matches(a));//false
    }
}

6行目は、末尾が「BC」の文字を指定しています。

連続する文字を指定

package test1;

public class Test1 {
    public static void main(String[] args) {

    	String a = "ac{2}b";
    	
    	System.out.println("accb".matches(a));//true
    	System.out.println("acccb".matches(a));//false
    	System.out.println("acb".matches(a));//false
    }
}

6行目は、「c」が2回連続する文字を指定しています。

数値1桁以上を指定

package test1;

public class Test1 {
    public static void main(String[] args) {

    	String ptr = "[0-9]{1,}-";
//    	String ptr = "\\d{1,}-";
    	
    	System.out.println("1-".matches(ptr)); //true
    	System.out.println("123-".matches(ptr)); //true
    	System.out.println("ab1-".matches(ptr)); //false
    	System.out.println("a1b-".matches(ptr)); //false
    }
}

6行目は、数値1桁以上とハイフン(-)を指定しています。
7行目も数値1桁以上を意味します。エスケープとエスケープのエスケープとしてバックスラッシュ(ユニコードのU+005C)つけます。環境によっては円マークで表示されます。

5桁の半角数値を指定

package test1;

public class Test1 {
    public static void main(String[] args) {

    	String a = "^[0-9]{5}$";
    	
    	System.out.println("12345".matches(a));//true
    	System.out.println("123".matches(a));//false 桁数不足
    	System.out.println("123a5".matches(a));//false 文字あり
    }
}

6行目は、5桁の半角数値を指定しています。

5桁の半角数値または英字の小文字(a-f)を指定

package test1;

public class Test1 {
    public static void main(String[] args) {

    	String a = "^[0-9a-f]{5}$";
    	
    	System.out.println("123ab".matches(a));//true
    	System.out.println("123a".matches(a));//false 桁数不足
    	System.out.println("abcde".matches(a));//true 英字のみ
    	System.out.println("12345".matches(a));//true 数値のみ
    }
}

6行目は、5桁の半角数値または英字の小文字(a-f)を指定しています。

郵便番号を指定(数値3桁とハイフンと数値4桁)

package test1;

public class Test1 {
    public static void main(String[] args) {

    	String a = "^[0-9]{3}-[0-9]{4}$";
//    	String a = "^\\d{3}-\\d{4}$";
    	
    	System.out.println("123-4567".matches(a));//true
    	System.out.println("1234567".matches(a));//false
    	System.out.println("1234-567".matches(a));//false
    }
}

6行目は、郵便番号(数値3桁とハイフンと数値4桁)を指定しています。
7行目は、6行目と同じ意味です。エスケープとエスケープのエスケープとしてバックスラッシュ(ユニコードのU+005C)つけます。環境によっては円マークで表示されます。

ドット(.)を文字として指定(エスケープ)

package test1;

public class Test1 {
    public static void main(String[] args) {

    	String a = "a\\.";
    	
    	System.out.println("a.".matches(a));//true
    	System.out.println("aa".matches(a));//false
    }
}

6行目は、ドット(.)を文字として扱います。「a.」を指定しています。
エスケープとエスケープのエスケープとしてバックスラッシュ(ユニコードのU+005C)をつけます。環境によっては円マークで表示されます。
ドット(.)にエスケープをつけない場合は任意の一文字という意味になります。

以下はJava8 API仕様のmatchesメソッドのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html#matches-java.lang.String-

関連の記事

Java 文字列を分割して配列にする(split)
Java 文字列を置換する(replace/replaceAll/replaceFirst)

△上に戻る