Метод Regexp.FindAllStringSubmatchIndex
Метод Regexp.FindAllStringSubmatchIndex выполняет поиск всех непересекающихся совпадений
регулярного выражения в переданной строке. Он возвращает срез срезов целых чисел,
где каждый внутренний срез содержит индексы начала и конца для всего совпадения
и для каждой захваченной подгруппы. Если совпадений не найдено, метод возвращает
nil. Первый параметр метода — это строка для поиска, второй параметр —
количество совпадений, которые нужно найти. Если передать -1, то будут
найдены все совпадения.
Синтаксис
re.FindAllStringSubmatchIndex(s, n)
Пример
Давайте найдем все совпадения email-адресов и получим индексы их групп:
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`(\w+)@(\w+)\.(\w+)`)
s := "my email: user@example.com and admin@site.org"
res := re.FindAllStringSubmatchIndex(s, -1)
fmt.Println(res)
}
Результат выполнения кода:
[[12 30 12 16 17 24 25 30] [36 50 36 41 42 46 47 50]]
В первом совпадении: общее совпадение с индексами [12,30], первая группа (имя пользователя) [12,16], вторая группа (домен) [17,24], третья группа (зона) [25,30].
Пример
Давайте найдем только первые 2 совпадения подстрок, начинающихся на цифру:
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`(\d{3})-(\d{2})`)
s := "123-45, 678-90, 111-22, 999-00"
res := re.FindAllStringSubmatchIndex(s, 2)
fmt.Println(res)
}
Результат выполнения кода:
[[0 6 0 3 4 6] [8 14 8 11 12 14]]
Пример
Давайте обработаем случай, когда совпадений нет:
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`\d+`)
s := "abcde"
res := re.FindAllStringSubmatchIndex(s, -1)
fmt.Println(res)
}
Результат выполнения кода:
[]
Метод вернул пустой срез, так как в строке нет цифр.
Смотрите также
-
метод
Regexp.FindAllStringSubmatch,
который возвращает сами подстроки совпадений и групп -
метод
Regexp.FindAllSubmatchIndex,
который работает с байтовыми срезами -
метод
Regexp.FindStringSubmatchIndex,
который находит только первое совпадение -
метод
Regexp.FindAllString,
который возвращает все совпадения в виде строк