Ce face Regex.find
regex.find(text) caută prima bucată din text care respectă tiparul și returnează un MatchResult, sau null dacă nu găsește nimic. Din rezultat iei textul găsit cu value și poziția cu range.
regex.findAll(text) returnează o Sequence cu toate potrivirile, în ordine. O parcurgi cu for sau o transformi cu map { it.value } și toList(). Potrivirile nu se suprapun.
Parametri
| Parametru | Descriere |
|---|---|
input |
Textul în care se caută. |
startIndex |
De unde începe căutarea (implicit 0). |
Ce returnează
find: MatchResult?. findAll: Sequence<MatchResult>.
Exemple
Exemplul 1: Primul număr dintr-un text
find găsește „250”, primul grup de cifre. range arată pozițiile ocupate în text.
fun main() {
val text = "Comanda costă 250 lei și ajunge în 3 zile"
val potrivire = Regex("""\d+""").find(text)
if (potrivire != null) {
println(potrivire.value)
println(potrivire.range)
}
println(Regex("""\d+""").find("fără cifre"))
}
Rezultat
250
14..16
null
Exemplul 2: Toate numerele cu findAll
Luăm toate sumele din text, le transformăm în numere și le adunăm.
fun main() {
val text = "pâine 5 lei, lapte 7 lei, brânză 19 lei"
val sume = Regex("""\d+""").findAll(text).map { it.value.toInt() }.toList()
println(sume)
println("Total: ${sume.sum()} lei")
}
Rezultat
[5, 7, 19]
Total: 31 lei
Exemplul 3: Hashtag-uri dintr-o postare
Tiparul #[\p{L}\d_]+ găsește un # urmat de litere (din orice limbă, inclusiv ă, ș, ț), cifre sau _.
fun main() {
val postare = "Vacanță la mare #Constanța2025 #vara #litoral"
for (m in Regex("""#[\p{L}\d_]+""").findAll(postare)) {
println("${m.value} la pozițiile ${m.range}")
}
}
Rezultat
#Constanța2025 la pozițiile 16..29
#vara la pozițiile 31..35
#litoral la pozițiile 37..44
Greșeli frecvente
- Folosești
find(text)!!.value. Dacă tiparul nu apare, programul se oprește; verificănullsau folosește?.value. - Apelezi
findAll(...).size. Rezultatul este oSequence, nu o listă; foloseștecount()sautoList(). \wdin Java nu include implicit literele cu diacritice: în „#Brașov” se găsește doar „#Bra”. Folosește[\p{L}\d_]+pentru litere din orice limbă.
Comenzi înrudite
MatchResult.groupValues: groupValues dă textele prinse de parantezele din tipar; destructured le pune direct în variabile.Regex: Regex este o expresie regulată (un tipar de text); matches verifică tot textul, containsMatchIn caută o bucată.Regex.replace: replace înlocuiește toate potrivirile tiparului (cu text fix sau calculat); split taie textul la fiecare potrivire.sequence: Construiește o secvență dintr-un bloc de cod care dă valori una câte una cu yield; codul se oprește și continuă la cerere.