Класс MatchGroupCollection

Класс MatchGroupCollection представляет собой коллекцию групп совпадения, полученных в результате успешного сопоставления регулярного выражения со строкой. Каждый элемент коллекции является объектом типа MatchGroup, который содержит текст совпадения и диапазон индексов в исходной строке. Коллекция индексируется, начиная с 0, где индекс 0 соответствует полному совпадению, а последующие индексы - группам в регулярном выражении.

Импорт

kotlinimport kotlin.text.MatchGroupCollection

Синтаксис

kotlininterface MatchGroupCollection : Collection<MatchGroup?>

Свойства

Класс MatchGroupCollection наследует все свойства интерфейса Collection:

kotlinval size: Int

Методы

Основные методы, доступные в MatchGroupCollection:

kotlinoperator fun get(index: Int): MatchGroup?
fun isEmpty(): Boolean
operator fun iterator(): Iterator<MatchGroup?>
fun contains(element: MatchGroup?): Boolean
fun containsAll(elements: Collection<MatchGroup?>): Boolean

Пример

Получение групп совпадения из результата регулярного выражения:

kotlinval 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})")
  }
}

Результат выполнения кода:

kotlinTotal groups: 3
Group 0: 123-abc (range: 0..6)
Group 1: 123 (range: 0..2)
Group 2: abc (range: 4..6)

Пример

Проверка наличия групп и доступ к их значениям:

kotlinval 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")
  }
}

Результат выполнения кода:

kotlinFull match: 456-def
First group: 456
Second group: def

Пример

Итерация по группам совпадения с помощью цикла:

kotlinval 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++
  }
}

Результат выполнения кода:

kotlinGroup 0: 'John Doe' at position 0..7
Group 1: 'John' at position 0..3
Group 2: 'Doe' at position 5..7

Пример

Обработка необязательных групп, которые могут отсутствовать:

kotlinval 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}")
    }
  }
}

Результат выполнения кода:

kotlinGroup 0: 789
Group 1: 789
Group 2: null

Смотрите также