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

Метод regexp.Regexp.FindAllSubmatch

Метод FindAllSubmatch выполняет поиск всех непересекающихся совпадений регулярного выражения в байтовом срезе. В первый параметр мы передаем байтовый срез для поиска, во второй параметр мы передаем целое число, которое определяет максимальное количество совпадений. Метод возвращает срез срезов байтовых срезов, где каждый внутренний срез содержит полный текст совпадения и текст всех подвыражений (групп) в том порядке, в котором они определены в регулярном выражении. Если совпадений нет, метод возвращает nil.

Особенность метода в том, что он возвращает данные в виде байтовых срезов ([][]byte), а не строк. Это делает его удобным для работы с бинарными данными или когда важна производительность. Чтобы получить результат в виде строк, используйте метод FindAllStringSubmatch.

Второй параметр n определяет максимальное количество возвращаемых совпадений. Если передать -1, метод вернет все возможные совпадения. Если передать 0 или отрицательное число, кроме -1, результат будет nil.

Синтаксис

re.FindAllSubmatch(b, n)

Пример

Давайте найдем все совпадения с подвыражениями в строке:

package main import ( "fmt" "regexp" ) func main() { re := regexp.MustCompile(`(\d{2})-(\d{2})-(\d{4})`) b := []byte("Даты: 12-05-2023 и 25-12-2024") res := re.FindAllSubmatch(b, -1) for _, match := range res { fmt.Printf("Полное совпадение: %s\n", match[0]) fmt.Printf("День: %s, Месяц: %s, Год: %s\n", match[1], match[2], match[3]) } }

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

"Полное совпадение: 12-05-2023" "День: 12, Месяц: 05, Год: 2023" "Полное совпадение: 25-12-2024" "День: 25, Месяц: 12, Год: 2024"

Пример

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

package main import ( "fmt" "regexp" ) func main() { re := regexp.MustCompile(`([A-Z][a-z]+) is (\d+) years old`) b := []byte("Alice is 25 years old, Bob is 30 years old, Charlie is 35 years old") res := re.FindAllSubmatch(b, -1) for _, match := range res { fmt.Printf("Name: %s, Age: %s\n", match[1], match[2]) } }

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

"Name: Alice, Age: 25" "Name: Bob, Age: 30" "Name: Charlie, Age: 35"

Пример

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

package main import ( "fmt" "regexp" ) func main() { re := regexp.MustCompile(`(\d+)x(\d+)`) b := []byte("Размеры: 1920x1080, 1280x720, 640x480") res := re.FindAllSubmatch(b, 2) fmt.Printf("Количество совпадений: %d\n", len(res)) for _, match := range res { fmt.Printf("Ширина: %s, Высота: %s\n", match[1], match[2]) } }

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

"Количество совпадений: 2" "Ширина: 1920, Высота: 1080" "Ширина: 1280, Высота: 720"

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

  • метод FindAllStringSubmatch,
    который возвращает совпадения в виде строк
  • метод FindSubmatch,
    который находит только первое совпадение
  • метод FindAll,
    который находит все совпадения без подвыражений
  • метод FindAllString,
    который находит все совпадения в виде строк
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить