Метод regexp.Regexp.FindIndex

Метод regexp.Regexp.FindIndex ищет самое левое совпадение регулярного выражения в байтовом срезе. Он возвращает срез из двух целых чисел - начальный и конечный индексы совпадения (полуоткрытый интервал). Если совпадение не найдено, метод возвращает nil. Первым параметром метод принимает байтовый срез ([]byte), в котором производится поиск.

Синтаксис

gore.FindIndex(b)

Пример

Давайте найдем позицию подстроки "abc" в байтовом срезе:

gopackage main

import (
  "fmt"
  "regexp"
)

func main() {
  re := regexp.MustCompile(`abc`)
  b := []byte("123abc456")
  res := re.FindIndex(b)
  fmt.Println(res)
}

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

go[3 6]

Индексы указывают, что совпадение начинается с позиции 3 (нумерация с нуля) и заканчивается на позиции 6 (не включая ее).

Пример

Давайте найдем позицию цифр в байтовом срезе:

gopackage main

import (
  "fmt"
  "regexp"
)

func main() {
  re := regexp.MustCompile(`\d+`)
  b := []byte("abc123def456")
  res := re.FindIndex(b)
  fmt.Println(res)
}

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

go[3 6]

Метод находит самую левую последовательность цифр, начиная с индекса 3 и заканчивая индексом 6.

Пример

Давайте попробуем найти позицию подстроки, которой нет в байтовом срезе:

gopackage main

import (
  "fmt"
  "regexp"
)

func main() {
  re := regexp.MustCompile(`xyz`)
  b := []byte("abcde12345")
  res := re.FindIndex(b)
  fmt.Println(res)
}

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

go[]int(nil)

Метод возвращает nil, так как подстрока не найдена.

Пример

Давайте используем найденные индексы для извлечения совпавшей подстроки:

gopackage main

import (
  "fmt"
  "regexp"
)

func main() {
  re := regexp.MustCompile(`[0-9]+`)
  b := []byte("abc123def456")
  indices := re.FindIndex(b)
  if indices != nil {
    match := b[indices[0]:indices[1]]
    fmt.Printf("Match: %s, Start: %d, End: %d\n", match, indices[0], indices[1])
  }
}

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

go"Match: 123, Start: 3, End: 6"

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

  • метод regexp.Regexp.FindStringIndex,
    который возвращает индексы совпадения в строке
  • метод regexp.Regexp.FindAllIndex,
    который возвращает индексы всех совпадений
  • метод regexp.Regexp.Find,
    который возвращает найденную подстроку
  • метод regexp.Regexp.FindString,
    который возвращает найденную подстроку в виде строки