Класс MatchGroupCollection
Класс MatchGroupCollection
представляет собой коллекцию групп совпадения,
полученных в результате успешного сопоставления регулярного выражения со строкой.
Каждый элемент коллекции является объектом типа MatchGroup
, который содержит
текст совпадения и диапазон индексов в исходной строке.
Коллекция индексируется, начиная с 0
, где индекс 0
соответствует
полному совпадению, а последующие индексы - группам в регулярном выражении.
Импорт
import kotlin.text.MatchGroupCollection
Синтаксис
interface MatchGroupCollection : Collection<MatchGroup?>
Свойства
Класс MatchGroupCollection
наследует все свойства интерфейса Collection
:
val size: Int
Методы
Основные методы, доступные в MatchGroupCollection
:
operator fun get(index: Int): MatchGroup?
fun isEmpty(): Boolean
operator fun iterator(): Iterator<MatchGroup?>
fun contains(element: MatchGroup?): Boolean
fun containsAll(elements: Collection<MatchGroup?>): Boolean
Пример
Получение групп совпадения из результата регулярного выражения:
val pattern = Regex("(\\d+)-(\\w+)")
val input = "123-abc"
val matchResult = pattern.find(input)
if (matchResult != null) {
val groups: MatchGroupCollection = matchResult.groups
println("Total groups: ${groups.size}")
for (i in 0 until groups.size) {
val group = groups[i]
println("Group $i: ${group?.value} (range: ${group?.range})")
}
}
Результат выполнения кода:
Total groups: 3
Group 0: 123-abc (range: 0..6)
Group 1: 123 (range: 0..2)
Group 2: abc (range: 4..6)
Пример
Проверка наличия групп и доступ к их значениям:
val pattern = Regex("(\\d+)-(\\w+)")
val input = "456-def"
val matchResult = pattern.find(input)
if (matchResult != null) {
val groups = matchResult.groups
if (!groups.isEmpty() && groups.size > 1) {
val fullMatch = groups[0]?.value
val firstGroup = groups[1]?.value
val secondGroup = groups[2]?.value
println("Full match: $fullMatch")
println("First group: $firstGroup")
println("Second group: $secondGroup")
}
}
Результат выполнения кода:
Full match: 456-def
First group: 456
Second group: def
Пример
Итерация по группам совпадения с помощью цикла:
val pattern = Regex("(\\w+)\\s(\\w+)")
val input = "John Doe"
val matchResult = pattern.find(input)
if (matchResult != null) {
var index = 0
for (group in matchResult.groups) {
if (group != null) {
println("Group $index: '${group.value}' at position ${group.range}")
}
index++
}
}
Результат выполнения кода:
Group 0: 'John Doe' at position 0..7
Group 1: 'John' at position 0..3
Group 2: 'Doe' at position 5..7
Пример
Обработка необязательных групп, которые могут отсутствовать:
val pattern = Regex("(\\d+)(?:-(\\w+))?")
val input = "789"
val matchResult = pattern.find(input)
if (matchResult != null) {
val groups = matchResult.groups
for (i in 0 until groups.size) {
val group = groups[i]
if (group == null) {
println("Group $i: null")
} else {
println("Group $i: ${group.value}")
}
}
}
Результат выполнения кода:
Group 0: 789
Group 1: 789
Group 2: null