Класс MatchResult

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

Импорт

kotlinimport kotlin.text.MatchResult

Синтаксис

kotlinclass MatchResult {
  val value: String
  val range: IntRange
  val groups: MatchGroupCollection
  val groupValues: List<String>
  
  fun next(): MatchResult?
  fun destructured(): Destructured
}

Пример

Получим результат сопоставления и выведем основную информацию:

kotlinval regex = Regex("(\\d+)-(\\w+)")
val input = "123-abc"
val matchResult = regex.find(input)

if (matchResult != null) {
  println("Found: ${matchResult.value}")
  println("Position: ${matchResult.range}")
  println("Groups: ${matchResult.groupValues}")
}

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

kotlinFound: 123-abc
Position: 0..6
Groups: [123-abc, 123, abc]

Пример

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

kotlinval regex = Regex("(\\d+)-(\\w+)")
val input = "123-abc"
val matchResult = regex.find(input)

if (matchResult != null) {
  val wholeMatch = matchResult.groups[0]?.value
  val firstGroup = matchResult.groups[1]?.value
  val secondGroup = matchResult.groups[2]?.value
  
  println("Whole: $wholeMatch")
  println("First group: $firstGroup")
  println("Second group: $secondGroup")
}

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

kotlinWhole: 123-abc
First group: 123
Second group: abc

Пример

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

kotlinval regex = Regex("(\\d+)-(\\w+)")
val input = "123-abc"
val matchResult = regex.find(input)

if (matchResult != null) {
  val (num, text) = matchResult.destructured()
  println("Number: $num")
  println("Text: $text")
}

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

kotlinNumber: 123
Text: abc

Пример

Найдем все совпадения в строке используя метод next:

kotlinval regex = Regex("\\d+")
val input = "a1 b22 c333 d4444"
var matchResult = regex.find(input)

while (matchResult != null) {
  println("Found: ${matchResult.value} at position ${matchResult.range}")
  matchResult = matchResult.next()
}

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

kotlinFound: 1 at position 1..1
Found: 22 at position 4..5
Found: 333 at position 8..10
Found: 4444 at position 13..16

Пример

Используем свойства value и range для получения информации о найденном совпадении:

kotlinval regex = Regex("code")
val input = "Learn code programming"
val matchResult = regex.find(input)

if (matchResult != null) {
  println("Matched text: ${matchResult.value}")
  println("Start index: ${matchResult.range.first}")
  println("End index: ${matchResult.range.last}")
  println("Length: ${matchResult.value.length}")
}

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

kotlinMatched text: code
Start index: 6
End index: 9
Length: 4

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