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