regexp.Regexp.FindReaderSubmatchIndex
Метод FindReaderSubmatchIndex выполняет поиск первого совпадения с регулярным выражением
в данных, доступных через интерфейс io.RuneReader. В качестве первого аргумента он принимает
указатель на объект, реализующий io.RuneReader. Вторым аргументом передается срез байтов
[]byte, который используется для поиска в буфере.
Возвращаемый результат — срез целых чисел []int. Если совпадение найдено,
срез содержит пары индексов, указывающие начало и конец каждой подмаски
(включая полное совпадение). Если совпадений нет, метод возвращает nil.
Синтаксис
func (re *Regexp) FindReaderSubmatchIndex(r io.RuneReader) []int
Пример
В этом примере мы ищем совпадение с регулярным выражением,
которое содержит две подмаски. В качестве источника данных
используется строка, преобразованная в strings.Reader.
package 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)
}
Результат выполнения кода:
[0 7 0 4 5 7]
Индексы означают: полное совпадение занимает позиции с 0 по 7, первая подмаска — с 0 по 4, вторая подмаска — с 5 по 7.
Пример
Если совпадение не найдено, метод возвращает nil.
package main
import (
"fmt"
"regexp"
"strings"
)
func main() {
re := regexp.MustCompile(`[a-z]+`)
reader := strings.NewReader("12345")
res := re.FindReaderSubmatchIndex(reader)
fmt.Println(res)
}
Результат выполнения кода:
[]
В данном случае возвращается пустой срез, что означает отсутствие совпадений.
Пример
Если регулярное выражение не содержит подмасок, возвращается только пара индексов для полного совпадения.
package main
import (
"fmt"
"regexp"
"strings"
)
func main() {
re := regexp.MustCompile(`\d+`)
reader := strings.NewReader("abc 123 def")
res := re.FindReaderSubmatchIndex(reader)
fmt.Println(res)
}
Результат выполнения кода:
[4 7]
Индексы указывают на первое найденное число в потоке: с 4 по 7 символ.
Смотрите также
-
метод
FindReaderIndex,
который возвращает только индексы полного совпадения -
метод
FindStringSubmatchIndex,
который выполняет аналогичный поиск, но работает со строкой -
метод
FindAllSubmatchIndex,
который находит все совпадения в байтовом срезе -
метод
MatchReader,
который проверяет наличие совпадения в io.RuneReader