Метод regexp.Regexp.FindAllSubmatchIndex

Метод FindAllSubmatchIndex применяется к скомпилированному регулярному выражению и ищет все неперекрывающиеся совпадения в переданной строке. В отличие от метода FindAllSubmatch, который возвращает сами подстроки, данный метод возвращает индексы начала и конца для каждого найденного совпадения и для каждой захваченной подмаски. Первым параметром метод принимает строку для поиска, вторым параметром принимает максимальное количество совпадений, которое нужно найти.

Синтаксис

gore.FindAllSubmatchIndex(str, n)

Пример

Давайте найдем все совпадения с индексами для подмасок в строке 'ab ab ab':

gopackage main

import (
  "fmt"
  "regexp"
)

func main() {
  re := regexp.MustCompile(`(a)(b)`)
  str := "ab ab ab"
  res := re.FindAllSubmatchIndex(str, -1)
  fmt.Println(res)
}

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

go[[0 2 0 1 1 2] [3 5 3 4 4 5] [6 8 6 7 7 8]]

Пример

Давайте найдем первые два совпадения с индексами в строке '12345 67890':

gopackage main

import (
  "fmt"
  "regexp"
)

func main() {
  re := regexp.MustCompile(`(\d)(\d)`)
  str := "12345 67890"
  res := re.FindAllSubmatchIndex(str, 2)
  fmt.Println(res)
}

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

go[[0 2 0 1 1 2] [1 3 1 2 2 3]]

Пример

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

gopackage main

import (
  "fmt"
  "regexp"
)

func main() {
  re := regexp.MustCompile(`(\d+)-(\w+)`)
  str := "123-abc 456-def 789-ghi"
  res := re.FindAllSubmatchIndex(str, -1)
  fmt.Println(res)
}

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

go[[0 7 0 3 4 7] [8 15 8 11 12 15] [16 23 16 19 20 23]]

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

  • метод FindAllSubmatch,
    который возвращает сами подстроки всех совпадений
  • метод FindSubmatchIndex,
    который возвращает индексы для первого совпадения
  • метод FindAllStringSubmatchIndex,
    который является аналогом для строк
  • функцию MustCompile,
    которая компилирует регулярное выражение с паникой при ошибке