cpp

Регулярные выражения. Поиск всех соответствий шаблону

Получить все совпадения с шаблоном позволяют следующие методы:

  • FindAllStringSubmatch() — возвращает двумерный слайс со всеми фрагментами, соответствующими шаблону регулярного выражения. Первый элемент каждого вложенного слайса содержит фрагмент, полностью совпадающий с шаблоном, а последующие элементы — это фрагменты, заключенные внутри шаблона в круглые скобки. Во втором параметре можно указать максимальное количество элементов слайса. Чтобы получить все фрагменты нужно передать значение -1. Формат метода:
(*regexp.Regexp).FindAllStringSubmatch(s string,
                                       n int) [][]string

Пример:

re := regexp.MustCompile(`([0-9]+)\-([a-z]+)`)
s := "1-a 2-b 3-c"
fmt.Println(re.FindAllStringSubmatch(s, 2))
// [[1-a 1 a] [2-b 2 b]]
fmt.Println(re.FindAllStringSubmatch(s, -1))
// [[1-a 1 a] [2-b 2 b] [3-c 3 c]]
fmt.Println(re.FindAllStringSubmatch("str", -1) == nil)
// true
  • FindAllSubmatch() — возвращает трехмерный слайс со всеми фрагментами, соответствующими шаблону регулярного выражения. Во втором параметре можно указать максимальное количество элементов слайса. Чтобы получить все фрагменты нужно передать значение -1. Формат метода:
(*regexp.Regexp).FindAllSubmatch(b []byte, n int) [][][]byte

Пример:

re := regexp.MustCompile(`([0-9]+)\-([a-z]+)`)
s := []byte("1-a 2-b 3-c")
fmt.Printf("%q\n", re.FindAllSubmatch(s, 2))
// [["1-a" "1" "a"] ["2-b" "2" "b"]]
fmt.Printf("%q\n", re.FindAllSubmatch(s, -1))
// [["1-a" "1" "a"] ["2-b" "2" "b"] ["3-c" "3" "c"]]
fmt.Println(re.FindAllSubmatch([]byte("str"), -1) == nil)
// true
  • FindStringSubmatch() — возвращает слайс с частями первого фрагмента, соответствующего шаблону регулярного выражения. Первый элемент содержит фрагмент, полностью совпадающий с шаблоном, а последующие элементы — это фрагменты, заключенные внутри шаблона в круглые скобки. Формат метода:
(*regexp.Regexp).FindStringSubmatch(s string) []string

Пример:

re := regexp.MustCompile(`([0-9]+)\-([a-z]+)`)
s := "1-a 2-b 3-c"
fmt.Println(re.FindStringSubmatch(s))            // [1-a 1 a]
fmt.Println(re.FindStringSubmatch("str") == nil) // true
  • FindSubmatch() — возвращает двумерный слайс с частями первого фрагмента, соответствующего шаблону регулярного выражения. Формат метода:
(*regexp.Regexp).FindSubmatch(b []byte) [][]byte

Пример:

re := regexp.MustCompile(`([0-9]+)\-([a-z]+)`)
s := []byte("1-a 2-b 3-c")
fmt.Printf("%q\n", re.FindSubmatch(s))   // ["1-a" "1" "a"]
fmt.Println(re.FindSubmatch([]byte("str")) == nil) // true
  • FindAllStringSubmatchIndex() — возвращает двумерный слайс с индексами начала и конца частей фрагментов, соответствующих шаблону регулярного выражения. Во втором параметре можно указать максимальное количество элементов слайса. Чтобы получить все фрагменты нужно передать значение -1. Формат метода:
(*regexp.Regexp).FindAllStringSubmatchIndex(s string,
                                            n int) [][]int

Пример:

re := regexp.MustCompile(`([0-9]+)\-([a-z]+)`)
s := "1-a 2-b 3-c"
fmt.Println(re.FindAllStringSubmatchIndex(s, 2))
// [[0 3 0 1 2 3] [4 7 4 5 6 7]]
fmt.Println(re.FindAllStringSubmatchIndex(s, -1))
// [[0 3 0 1 2 3] [4 7 4 5 6 7] [8 11 8 9 10 11]]
fmt.Println(re.FindAllStringSubmatchIndex("str", -1) == nil)
// true
  • FindAllSubmatchIndex() — возвращает двумерный слайс с индексами начала и конца частей фрагментов, соответствующих шаблону регулярного выражения. Во втором параметре можно указать максимальное количество элементов слайса. Чтобы получить все фрагменты нужно передать значение -1. Формат метода:
(*regexp.Regexp).FindAllSubmatchIndex(b []byte, n int) [][]int

Пример:

re := regexp.MustCompile(`([0-9]+)\-([a-z]+)`)
s := []byte("1-a 2-b 3-c")
fmt.Println(re.FindAllSubmatchIndex(s, 2))
// [[0 3 0 1 2 3] [4 7 4 5 6 7]]
fmt.Println(re.FindAllSubmatchIndex(s, -1))
// [[0 3 0 1 2 3] [4 7 4 5 6 7] [8 11 8 9 10 11]]
fmt.Println(re.FindAllSubmatchIndex([]byte("str"), -1) == nil)
// true
  • FindStringSubmatchIndex() — возвращает слайс с индексами начала и конца частей первого фрагмента, соответствующего шаблону регулярного выражения. Формат метода:
(*regexp.Regexp).FindStringSubmatchIndex(s string) []int

Пример:

re := regexp.MustCompile(`([0-9]+)\-([a-z]+)`)
s := "1-a 2-b 3-c"
fmt.Println(re.FindStringSubmatchIndex(s)) // [0 3 0 1 2 3]
fmt.Println(re.FindStringSubmatchIndex("str") == nil) // true
  • FindSubmatchIndex() — возвращает слайс с индексами начала и конца частей первого фрагмента, соответствующего шаблону регулярного выражения. Формат метода:
(*regexp.Regexp).FindSubmatchIndex(b []byte) []int

Пример:

re := regexp.MustCompile(`([0-9]+)\-([a-z]+)`)
s := []byte("1-a 2-b 3-c")
fmt.Println(re.FindSubmatchIndex(s)) // [0 3 0 1 2 3]
fmt.Println(re.FindSubmatchIndex([]byte("str")) == nil) // true
  • FindReaderSubmatchIndex() — возвращает слайс с индексами начала и конца частей первого фрагмента, соответствующего шаблону регулярного выражения. Формат метода:
(*regexp.Regexp).FindReaderSubmatchIndex(r io.RuneReader) []int

Пример:

re := regexp.MustCompile(`([0-9]+)\-([a-z]+)`)
s := strings.NewReader("1-a 2-b 3-c")
fmt.Println(re.FindReaderSubmatchIndex(s)) // [0 3 0 1 2 3]
s = strings.NewReader("str")
fmt.Println(re.FindReaderSubmatchIndex(s) == nil) // true

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp