Класс MatchGroup

Класс MatchGroup представляет собой часть строки, которая соответствует определённой группе в регулярном выражении. Каждый объект содержит значение найденной подстроки и диапазон её позиций в исходной строке.

Импорт

kotlinimport kotlin.text.MatchGroup

Синтаксис

kotlinclass MatchGroup : Comparable<MatchGroup> {
  val value: String
  val range: IntRange
}

Свойства

value: String - значение найденной подстроки.

range: IntRange - диапазон индексов (начальный и конечный) найденной подстроки в исходной строке.

Пример

Найдем группы в строке с помощью регулярного выражения:

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

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

kotlinFirst group value: 123
First group range: 0..2
Second group value: abcde
Second group range: 4..8

Пример

Получим значение и диапазон всей найденной строки (группа 0):

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

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

kotlinWhole match value: 123-abcde
Whole match range: 0..8

Пример

Использование свойства value для получения текста группы:

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

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

kotlinCode: 123
Number: 45

Пример

Использование свойства range для получения позиций группы в строке:

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

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

kotlinGroup starts at: 8
Group ends at: 11

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