РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
420 of 1593 menu

Метод Regexp.FindAllStringSubmatch

Метод Regexp.FindAllStringSubmatch ищет все непересекающиеся совпадения регулярного выражения в строке и возвращает срез срезов строк. Каждый внутренний срез содержит полное совпадение и все захваченные подгруппы (подвыражения). Первым параметром метод принимает строку для поиска, вторым параметром - максимальное количество совпадений, которое нужно найти (если передать -1, будут найдены все совпадения).

Синтаксис

re.FindAllStringSubmatch(s string, n int) [][]string

Пример

Давайте найдем все совпадения с подвыражениями в строке. В этом примере мы ищем числа с их текстовым описанием:

package main import ( "fmt" "regexp" ) func main() { re := regexp.MustCompile(`(\d+)\s*-\s*(\w+)`) s := "10 - apples, 20 - oranges, 30 - bananas" res := re.FindAllStringSubmatch(s, -1) fmt.Println(res) }

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

[[10 - apples 10 apples] [20 - oranges 20 oranges] [30 - bananas 30 bananas]]

Пример

Давайте ограничим количество найденных совпадений с помощью второго параметра:

package main import ( "fmt" "regexp" ) func main() { re := regexp.MustCompile(`(\d+)\s*-\s*(\w+)`) s := "10 - apples, 20 - oranges, 30 - bananas" res := re.FindAllStringSubmatch(s, 2) fmt.Println(res) }

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

[[10 - apples 10 apples] [20 - oranges 20 oranges]]

Пример

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

package main import ( "fmt" "regexp" ) func main() { re := regexp.MustCompile(`(\w+)=(\d+)`) s := "x=10 y=20 z=30" matches := re.FindAllStringSubmatch(s, -1) for _, match := range matches { key := match[1] value := match[2] fmt.Printf("key: %s, value: %s\n", key, value) } }

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

"key: x, value: 10" "key: y, value: 20" "key: z, value: 30"

Пример

Если совпадений нет, метод возвращает пустой срез [][]string:

package main import ( "fmt" "regexp" ) func main() { re := regexp.MustCompile(`(\d+)`) s := "abc def" res := re.FindAllStringSubmatch(s, -1) fmt.Println(res) }

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

[]

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

  • метод Regexp.FindAllString,
    который возвращает только полные совпадения без подвыражений
  • метод Regexp.FindStringSubmatch,
    который возвращает только первое совпадение с подвыражениями
  • метод Regexp.FindAllSubmatch,
    который ищет совпадения в байтовых срезах
  • функцию regexp.Compile,
    которая компилирует регулярное выражение с возможностью ошибки
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить