regexp.Regexp.FindReaderIndex

Метод regexp.Regexp.FindReaderIndex находит первое совпадение регулярного выражения в данных, полученных из интерфейса io.RuneReader, и возвращает срез из двух целых чисел — индексы начала и конца совпадения в рунах. Если совпадение не найдено, метод возвращает nil. В отличие от методов, работающих со строками или байтовыми срезами, этот метод предназначен для потокового чтения данных, когда весь текст недоступен сразу.

Синтаксис

gofunc (re *Regexp) FindReaderIndex(r io.RuneReader) []int

Метод принимает один параметр — интерфейс io.RuneReader, из которого читаются руны для поиска. Возвращает срез []int с двумя индексами: первый индекс — позиция начала совпадения, второй — позиция конца совпадения (не включая последний символ). Если совпадений нет, возвращается nil.

Пример

Давайте найдём первое числовое совпадение в тексте, прочитанном из строки через strings.NewReader:

gopackage main

import (
  "fmt"
  "regexp"
  "strings"
)

func main() {
  re := regexp.MustCompile(`\d+`)
  r := strings.NewReader("abc 123 def 456")

  indexes := re.FindReaderIndex(r)
  fmt.Println(indexes)
}

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

go[4 7]

Индексы [4 7] означают, что совпадение начинается с 4-й руны и заканчивается перед 7-й руной (руны с индексами 4, 5 и 6 составляют число "123").

Пример

Давайте найдём совпадение по шаблону слова из букв латинского алфавита в потоке данных:

gopackage main

import (
  "fmt"
  "regexp"
  "strings"
)

func main() {
  re := regexp.MustCompile(`[A-Za-z]+`)
  r := strings.NewReader("Hello, World!")

  indexes := re.FindReaderIndex(r)
  fmt.Println(indexes)
}

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

go[0 5]

Индексы [0 5] указывают на то, что совпадение найдено в позициях с 0 по 5 (слово "Hello").

Пример

Если совпадение не найдено, метод возвращает nil:

gopackage main

import (
  "fmt"
  "regexp"
  "strings"
)

func main() {
  re := regexp.MustCompile(`\d+`)
  r := strings.NewReader("abc def")

  indexes := re.FindReaderIndex(r)
  fmt.Println(indexes)
}

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

go[]

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