Ce face Regex
O expresie regulată descrie un tipar de text: \d înseamnă o cifră, [a-z] o literă mică, + „o dată sau de mai multe ori”, {4} „exact de 4 ori”, ^ și $ începutul și sfârșitul. În Kotlin creezi tiparul cu Regex("..."). Ca să nu dublezi backslash-urile, scrie tiparul într-un raw string: Regex("""\d+""").
regex.matches(text) returnează true doar dacă tot textul respectă tiparul. regex.containsMatchIn(text) returnează true dacă tiparul apare undeva în text. Opțiunile, ca RegexOption.IGNORE_CASE, se dau ca al doilea argument.
Parametri
| Parametru | Descriere |
|---|---|
pattern |
Tiparul, în sintaxa expresiilor regulate din Java. |
option |
Opțional: de exemplu RegexOption.IGNORE_CASE. |
Ce returnează
matches și containsMatchIn: Boolean.
Exemple
Exemplul 1: Validarea unui număr de telefon
Tiparul cere „07” urmat de exact 8 cifre. Al treilea număr are o cifră în plus, deci nu se potrivește complet.
fun main() {
val telefon = Regex("""07\d{8}""")
for (n in listOf("0722123456", "0232123456", "07221234567")) {
println("$n: ${telefon.matches(n)}")
}
}
Rezultat
0722123456: true
0232123456: false
07221234567: false
Exemplul 2: matches față de containsMatchIn
Textul conține un număr, dar nu este format doar din număr: containsMatchIn dă true, matches dă false.
fun main() {
val numar = Regex("""\d+""")
val text = "Camera 204"
println(numar.matches(text))
println(numar.containsMatchIn(text))
println(numar.matches("204"))
}
Rezultat
false
true
true
Exemplul 3: Fără să conteze literele mari
Cu RegexOption.IGNORE_CASE, „IAȘI” și „iași” se potrivesc amândouă.
fun main() {
val oras = Regex("iași", RegexOption.IGNORE_CASE)
val mesaje = listOf("Plec la IAȘI mâine", "Sunt în Cluj", "iași e frumos")
for (m in mesaje) {
println("$m -> ${oras.containsMatchIn(m)}")
}
}
Rezultat
Plec la IAȘI mâine -> true
Sunt în Cluj -> false
iași e frumos -> true
Greșeli frecvente
- Scrii
Regex("\d+")într-un String obișnuit. În ghilimele simple backslash-ul trebuie dublat ("\\d+"); mai simplu, folosește un raw string"""\d+""". - Folosești
matchescând vrei să știi dacă tiparul apare undeva. matches verifică tot textul; foloseștecontainsMatchInsaufind.
Comenzi înrudite
String.matches: text.matches(regex) verifică dacă tot textul respectă tiparul; toRegex transformă un String într-un Regex.Regex.find: find returnează prima potrivire a tiparului în text (sau null), findAll toate potrivirile; value este textul găsit.Regex.replace: replace înlocuiește toate potrivirile tiparului (cu text fix sau calculat); split taie textul la fiecare potrivire.String.contains: Verifică dacă un text conține alt text, un caracter sau o potrivire Regex; se poate scrie și cu operatorul in.