Ce face MatchResult.groupValues
Parantezele dintr-o expresie regulată formează grupuri: în (\w+)@(\w+) primul grup este utilizatorul, al doilea domeniul. groupValues este lista textelor prinse: la poziția 0 este toată potrivirea, la 1 primul grup, la 2 al doilea și așa mai departe.
destructured permite scrierea val (an, luna, zi) = potrivire.destructured, care pune grupurile 1, 2, 3 direct în variabile (fără grupul 0). Pentru grupuri cu nume, (?<an>\d{4}), folosește groups["an"]?.value.
Ce returnează
groupValues: List<String>. destructured: un obiect care se poate destructura.
Exemple
Exemplul 1: Lista grupurilor
Poziția 0 este toată potrivirea; 1 și 2 sunt grupurile din paranteze.
fun main() {
val m = Regex("""(\w+)@(\w+)\.ro""").find("Scrie-mi la ana@exemplu.ro")
if (m != null) {
println(m.groupValues)
println("Utilizator: ${m.groupValues[1]}, domeniu: ${m.groupValues[2]}")
}
}
Rezultat
[ana@exemplu.ro, ana, exemplu]
Utilizator: ana, domeniu: exemplu
Exemplul 2: Destructurarea unei date
Cele trei grupuri ajung direct în trei variabile.
fun main() {
val data = Regex("""(\d{2})\.(\d{2})\.(\d{4})""")
val m = data.find("Examen pe 24.06.2025, sala 12") ?: return
val (zi, luna, an) = m.destructured
println("Ziua $zi, luna $luna, anul $an")
}
Rezultat
Ziua 24, luna 06, anul 2025
Exemplul 3: Prelucrarea unor rânduri de jurnal
Fiecare rând are ora, nivelul și mesajul. Rândurile care nu se potrivesc sunt sărite.
fun main() {
val jurnal = listOf(
"10:15 INFO Utilizator conectat",
"10:17 EROARE Fișier lipsă",
"rând invalid",
)
val tipar = Regex("""(\d{2}:\d{2}) (\w+) (.+)""")
for (rand in jurnal) {
val m = tipar.matchEntire(rand) ?: continue
val (ora, nivel, mesaj) = m.destructured
println("[$nivel] la $ora: $mesaj")
}
}
Rezultat
[INFO] la 10:15: Utilizator conectat
[EROARE] la 10:17: Fișier lipsă
Greșeli frecvente
- Iei
groupValues[0]crezând că este primul grup. Indexul 0 este toată potrivirea; primul grup este la indexul 1. - Destructurezi mai multe variabile decât grupuri are tiparul.
destructuredare doar câte grupuri ai pus în paranteze.
Comenzi înrudite
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.Destructuring (val (a, b) = ...): Destructuring desface un obiect în mai multe variabile deodată: val (nume, nota) = pereche.