Метод regexp.Regexp.FindStringSubmatchIndex

Метод FindStringSubmatchIndex используется для поиска первого совпадения с регулярным выражением в строке. В отличие от FindStringIndex, этот метод также возвращает индексы для каждой захваченной подгруппы. Метод возвращает срез целых чисел, который содержит пары индексов начала и конца каждого совпадения. Если совпадений не найдено, метод возвращает nil.

Синтаксис

gore.FindStringSubmatchIndex(s string) []int

Первый и единственный параметр FindStringSubmatchIndex принимает строку, в которой нужно выполнить поиск.

Пример

Давайте найдем индексы для совпадения с регулярным выражением `(\d{2})-(\d{2})` в строке "12-34":

gopackage main

import (
  "fmt"
  "regexp"
)

func main() {
  re := regexp.MustCompile(`(\d{2})-(\d{2})`)
  res := re.FindStringSubmatchIndex("12-34")
  fmt.Println(res)
}

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

go[0 5 0 2 3 5]

Индексы в срезе интерпретируются парами: первая пара (0, 5) — это индексы всего совпадения, вторая пара (0, 2) — индексы первой подгруппы ("12"), третья пара (3, 5) — индексы второй подгруппы ("34").

Пример

Рассмотрим случай, когда совпадение не найдено:

gopackage main

import (
  "fmt"
  "regexp"
)

func main() {
  re := regexp.MustCompile(`\d+`)
  res := re.FindStringSubmatchIndex("abc")
  fmt.Println(res)
}

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

go[]

В данном случае регулярное выражение ищет цифры, но строка не содержит цифр, поэтому возвращается пустой срез.

Пример

Метод возвращает индексы только первого совпадения, даже если в строке их несколько:

gopackage main

import (
  "fmt"
  "regexp"
)

func main() {
  re := regexp.MustCompile(`(\d+)`)
  res := re.FindStringSubmatchIndex("123 456 789")
  fmt.Println(res)
}

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

go[0 3 0 3]

Как видно, метод вернул индексы только для первого числа "123".

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