Метод regexp.Regexp.FindSubmatchIndex
Метод FindSubmatchIndex выполняет поиск совпадений с регулярным выражением
в байтовом срезе и возвращает срез целых чисел, содержащий индексы начала и конца
найденного совпадения, а также индексы всех подвыражений (групп) внутри него.
Если совпадение не найдено, метод возвращает nil.
Метод принимает один параметр — байтовый срез []byte, в котором
выполняется поиск.
Синтаксис
re.FindSubmatchIndex(b)
где re — скомпилированное регулярное выражение,
а b — байтовый срез для поиска.
Пример
Давайте найдем индексы совпадения и всех групп в байтовом срезе:
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`(\w+)@(\w+)\.(\w+)`)
b := []byte("user@example.com")
res := re.FindSubmatchIndex(b)
fmt.Println(res)
}
Результат выполнения кода:
[0 16 0 4 5 12 13 16]
В результате каждый элемент среза — это пара индексов: начало и конец соответствующей подстроки.
Первая пара 0 16 — это индексы всего совпадения, следующие пары — индексы групп:
0 4 (первая группа user), 5 12 (вторая группа example) и 13 16 (третья группа com).
Пример
Давайте найдем индексы совпадения с регулярным выражением, содержащим несколько групп:
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`(\d{2})-(\d{2})-(\d{4})`)
b := []byte("Дата: 25-12-2024")
res := re.FindSubmatchIndex(b)
fmt.Println(res)
}
Результат выполнения кода:
[6 16 6 8 9 11 12 16]
В данном примере совпадение найдено по индексам 6 16,
а три группы находятся по индексам 6 8, 9 11 и 12 16.
Пример
Рассмотрим случай, когда совпадение не найдено:
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`\d+`)
b := []byte("abcde")
res := re.FindSubmatchIndex(b)
fmt.Println(res)
}
Результат выполнения кода:
[]
Метод возвращает пустой срез [], если совпадений не найдено.
Смотрите также
-
метод
FindSubmatch,
который возвращает байтовые срезы найденных подстрок -
метод
FindAllSubmatchIndex,
который находит все совпадения и возвращает их индексы -
метод
FindStringSubmatchIndex,
который выполняет поиск в строке -
метод
FindIndex,
который возвращает только индексы совпадения без групп