[Kotlin] matches 正規表現で真偽値を返す

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

目次

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

matchesメソッド

文字列.matches(正規表現のパターン)
  • 正規表現のパターンで文字列を検索します。
  • 一致した場合、trueを返します。
  • 一致しなかった場合、falseを返します。

文字列を指定

fun main() {
    val re1 = Regex(".BC")

    println("ABC".matches(re1)) //true
    println("ACB".matches(re1)) //false
}

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

文字をORで指定

fun main() {
    val re1 = Regex("A[BC]")

    println("AB".matches(re1)) //true
    println("AC".matches(re1)) //true
    println("ABC".matches(re1)) //false
}

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

文字を否定で指定

fun main() {
    val re1 = Regex("ZZ[^AB]")

    println("ZZZ".matches(re1));//true
    println("ZZA".matches(re1));//false
    println("ZZB".matches(re1));//false
}

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

文字を範囲で指定

fun main() {
    val re1 = Regex("A[A-C]C")

    println("ABC".matches(re1));//true
    println("AZC".matches(re1));//false
}

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

先頭の文字列を指定

fun main() {
    val re1 = Regex("^AB.")

    println("ABC".matches(re1));//true
    println("AZC".matches(re1));//false
}

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

末尾の文字列を指定

fun main() {
    val re1 = Regex(".BC$")

    println("ABC".matches(re1));//true
    println("AZC".matches(re1));//false
}

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

連続する文字を指定

fun main() {
    val re1 = Regex("ac{2}b")

    println("accb".matches(re1));//true
    println("acccb".matches(re1));//false
    println("acb".matches(re1));//false
}

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

数値1桁以上を指定

fun main() {
    val re1 = Regex("[0-9]{1,}-")
//    val re1 = Regex("\\d{1,}-")

    println("1-".matches(re1));//true
    println("123-".matches(re1));//true
    println("ab1-".matches(re1));//false
    println("a1b-".matches(re1));//false
}

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

数値(0-9)の5桁+先頭と末尾も(0-9)

fun main() {
    val re1 = Regex("^[0-9]{5}$")

    println("12345".matches(re1));//true
    println("123".matches(re1));//false 桁数不足
    println("123a5".matches(re1));//false 文字あり
}

 

数値(0-9)と英字(a-f)の5桁+先頭と末尾も(0-9 or a-f)

fun main() {
    val re1 = Regex("^[0-9a-f]{5}$")

    println("123ab".matches(re1));//true
    println("123a".matches(re1));//false 桁数不足
    println("abcde".matches(re1));//true 英字のみ
    println("12345".matches(re1));//true 数値のみ
}

 

郵便番号(数値3桁とハイフンと数値4桁)+先頭と末尾も(0-9)

fun main() {
    val re1 = Regex("^[0-9]{3}-[0-9]{4}$")
//    val re1 = Regex("^\\d{3}-\\d{4}$")

    println("123-4567".matches(re1));//true
    println("1234567".matches(re1));//false
    println("1234-567".matches(re1));//false
}

2行目は、3行目と同じ意味です。エスケープとエスケープのエスケープとしてバックスラッシュ(ユニコードのU+005C)つけます。環境によっては円マークで表示されます。

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

fun main() {
    val re1 = Regex("a\\.")

    println("a.".matches(re1));//true
    println("aa".matches(re1));//false
}

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

関連の記事

[Kotlin] split 文字列を分割してリストにする
[Kotlin] replace 文字列を置換するサンプル

△上に戻る