Метод 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,
которая компилирует регулярное выражение с возможностью ошибки