Метод regexp.Regexp.FindAllSubmatchIndex
Метод FindAllSubmatchIndex применяется к скомпилированному регулярному выражению
и ищет все неперекрывающиеся совпадения в переданной строке. В отличие от метода
FindAllSubmatch, который возвращает сами подстроки, данный метод возвращает
индексы начала и конца для каждого найденного совпадения и для каждой захваченной
подмаски. Первым параметром метод принимает строку для поиска, вторым параметром
принимает максимальное количество совпадений, которое нужно найти.
Синтаксис
re.FindAllSubmatchIndex(str, n)
Пример
Давайте найдем все совпадения с индексами для подмасок в строке 'ab ab ab':
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`(a)(b)`)
str := "ab ab ab"
res := re.FindAllSubmatchIndex(str, -1)
fmt.Println(res)
}
Результат выполнения кода:
[[0 2 0 1 1 2] [3 5 3 4 4 5] [6 8 6 7 7 8]]
Пример
Давайте найдем первые два совпадения с индексами в строке '12345 67890':
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`(\d)(\d)`)
str := "12345 67890"
res := re.FindAllSubmatchIndex(str, 2)
fmt.Println(res)
}
Результат выполнения кода:
[[0 2 0 1 1 2] [1 3 1 2 2 3]]
Пример
Давайте найдем все совпадения с подмасками и индексами, используя более сложное выражение:
package 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)
}
Результат выполнения кода:
[[0 7 0 3 4 7] [8 15 8 11 12 15] [16 23 16 19 20 23]]
Смотрите также
-
метод
FindAllSubmatch,
который возвращает сами подстроки всех совпадений -
метод
FindSubmatchIndex,
который возвращает индексы для первого совпадения -
метод
FindAllStringSubmatchIndex,
который является аналогом для строк -
функцию
MustCompile,
которая компилирует регулярное выражение с паникой при ошибке