String.matches în Kotlin

text.matches(regex) verifică dacă tot textul respectă tiparul; toRegex transformă un String într-un Regex.

Sintaxă
infix fun CharSequence.matches(regex: Regex): Boolean
fun String.toRegex(): Regex
fun String.toRegex(option: RegexOption): Regex

Ce face String.matches

text matches regex (sau text.matches(regex)) este forma inversă a lui regex.matches(text): returnează true doar dacă întregul text se potrivește cu tiparul. Fiind funcție infix, se poate scrie fără punct și paranteze.

"\\d+".toRegex() creează un Regex dintr-un text, la fel ca Regex("\\d+"). Este util când tiparul vine dintr-o variabilă sau dintr-o configurație. Varianta cu RegexOption adaugă opțiuni, de exemplu ignorarea literelor mari.

Parametri

Parametru Descriere
regex Tiparul cu care se compară textul.
option Pentru toRegex: o opțiune, de exemplu RegexOption.IGNORE_CASE.

Ce returnează

matches: Boolean. toRegex: un Regex.

Exemple

Exemplul 1: Validarea unui cod de înmatriculare

Tiparul cere 1–2 litere mari, 2–3 cifre și 3 litere mari: „IS 12 ABC”, „B 123 XYZ”.

fun main() {
    val numar = """[A-Z]{1,2} \d{2,3} [A-Z]{3}""".toRegex()
    for (n in listOf("IS 12 ABC", "B 123 XYZ", "is 12 abc", "CJ 1 AB")) {
        println("$n: ${n matches numar}")
    }
}

Rezultat

IS 12 ABC: true
B 123 XYZ: true
is 12 abc: false
CJ 1 AB: false

Exemplul 2: Tipar din variabilă și opțiuni

Tiparul este construit dintr-un text, iar IGNORE_CASE acceptă și literele mici.

fun main() {
    val extensii = listOf("pdf", "docx")
    val tipar = (".+\\.(" + extensii.joinToString("|") + ")").toRegex(RegexOption.IGNORE_CASE)
    for (f in listOf("cv.pdf", "Contract.DOCX", "poza.jpg")) {
        println("$f: ${f.matches(tipar)}")
    }
}

Rezultat

cv.pdf: true
Contract.DOCX: true
poza.jpg: false

Exemplul 3: Un e-mail simplu

Un tipar simplificat: caractere fără spații, @, domeniu, punct și extensie.

fun main() {
    val email = """[^\s@]+@[^\s@]+\.[a-z]{2,}""".toRegex()
    for (e in listOf("ana@exemplu.ro", "ana@exemplu", "ana pop@exemplu.ro")) {
        println("$e: ${e matches email}")
    }
}

Rezultat

ana@exemplu.ro: true
ana@exemplu: false
ana pop@exemplu.ro: false

Greșeli frecvente

  • Scrii text.matches("\\d+") cu un String, ca în Java. În Kotlin, matches așteaptă un Regex; adaugă .toRegex().
  • Aștepți ca matches să găsească tiparul în interiorul textului. Trebuie să se potrivească tot textul; pentru căutare folosește Regex.containsMatchIn.

Comenzi înrudite

  • Regex: Regex este o expresie regulată (un tipar de text); matches verifică tot textul, containsMatchIn caută o bucată.
  • Regex.find: find returnează prima potrivire a tiparului în text (sau null), findAll toate potrivirile; value este textul găsit.
  • String.contains: Verifică dacă un text conține alt text, un caracter sau o potrivire Regex; se poate scrie și cu operatorul in.