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-
関連の記事