Класс MatchGroup
Класс MatchGroup представляет собой часть строки, которая соответствует определённой группе в регулярном выражении. Каждый объект содержит значение найденной подстроки и диапазон её позиций в исходной строке.
Импорт
import kotlin.text.MatchGroup
Синтаксис
class MatchGroup : Comparable<MatchGroup> {
val value: String
val range: IntRange
}
Свойства
value: String - значение найденной подстроки.
range: IntRange - диапазон индексов (начальный и конечный) найденной подстроки в исходной строке.
Пример
Найдем группы в строке с помощью регулярного выражения:
val pattern = Regex("(\\d+)-(\\w+)")
val input = "123-abcde"
val matchResult = pattern.find(input)
if (matchResult != null) {
val groups = matchResult.groups
val firstGroup: MatchGroup? = groups[1]
val secondGroup: MatchGroup? = groups[2]
println("First group value: " + firstGroup?.value)
println("First group range: " + firstGroup?.range)
println("Second group value: " + secondGroup?.value)
println("Second group range: " + secondGroup?.range)
}
Результат выполнения кода:
First group value: 123
First group range: 0..2
Second group value: abcde
Second group range: 4..8
Пример
Получим значение и диапазон всей найденной строки (группа 0):
val pattern = Regex("\\d+-\\w+")
val input = "123-abcde"
val matchResult = pattern.find(input)
if (matchResult != null) {
val wholeMatch: MatchGroup? = matchResult.groups[0]
println("Whole match value: " + wholeMatch?.value)
println("Whole match range: " + wholeMatch?.range)
}
Результат выполнения кода:
Whole match value: 123-abcde
Whole match range: 0..8
Пример
Использование свойства value для получения текста группы:
val pattern = Regex("(\\d{3})-(\\d{2})")
val input = "Phone: 123-45"
val matchResult = pattern.find(input)
if (matchResult != null) {
val codeGroup = matchResult.groups[1]
val numberGroup = matchResult.groups[2]
println("Code: " + codeGroup?.value)
println("Number: " + numberGroup?.value)
}
Результат выполнения кода:
Code: 123
Number: 45
Пример
Использование свойства range для получения позиций группы в строке:
val pattern = Regex("(test)")
val input = "This is test string"
val matchResult = pattern.find(input)
if (matchResult != null) {
val group = matchResult.groups[1]
val range = group?.range
println("Group starts at: " + range?.start)
println("Group ends at: " + range?.endInclusive)
}
Результат выполнения кода:
Group starts at: 8
Group ends at: 11