regexp.Regexp.FindReaderSubmatchIndex

Метод FindReaderSubmatchIndex выполняет поиск первого совпадения с регулярным выражением в данных, доступных через интерфейс io.RuneReader. В качестве первого аргумента он принимает указатель на объект, реализующий io.RuneReader. Вторым аргументом передается срез байтов []byte, который используется для поиска в буфере.

Возвращаемый результат — срез целых чисел []int. Если совпадение найдено, срез содержит пары индексов, указывающие начало и конец каждой подмаски (включая полное совпадение). Если совпадений нет, метод возвращает nil.

Синтаксис

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

Пример

В этом примере мы ищем совпадение с регулярным выражением, которое содержит две подмаски. В качестве источника данных используется строка, преобразованная в strings.Reader.

gopackage main

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

func main() {
  re := regexp.MustCompile(`(\d{4})-(\d{2})`)
  reader := strings.NewReader("2026-09")
  res := re.FindReaderSubmatchIndex(reader)
  fmt.Println(res)
}

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

go[0 7 0 4 5 7]

Индексы означают: полное совпадение занимает позиции с 0 по 7, первая подмаска — с 0 по 4, вторая подмаска — с 5 по 7.

Пример

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

gopackage main

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

func main() {
  re := regexp.MustCompile(`[a-z]+`)
  reader := strings.NewReader("12345")
  res := re.FindReaderSubmatchIndex(reader)
  fmt.Println(res)
}

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

go[]

В данном случае возвращается пустой срез, что означает отсутствие совпадений.

Пример

Если регулярное выражение не содержит подмасок, возвращается только пара индексов для полного совпадения.

gopackage main

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

func main() {
  re := regexp.MustCompile(`\d+`)
  reader := strings.NewReader("abc 123 def")
  res := re.FindReaderSubmatchIndex(reader)
  fmt.Println(res)
}

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

go[4 7]

Индексы указывают на первое найденное число в потоке: с 4 по 7 символ.

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

  • метод FindReaderIndex,
    который возвращает только индексы полного совпадения
  • метод FindStringSubmatchIndex,
    который выполняет аналогичный поиск, но работает со строкой
  • метод FindAllSubmatchIndex,
    который находит все совпадения в байтовом срезе
  • метод MatchReader,
    который проверяет наличие совпадения в io.RuneReader