Метод regexp.Regexp.FindStringSubmatch
Метод FindStringSubmatch выполняет поиск первого совпадения
с регулярным выражением в строке. Он возвращает срез строк,
где первый элемент — это полное совпадение, а последующие элементы —
это подстроки, захваченные группами (вложенными скобками) в
регулярном выражении. Если совпадений нет, метод возвращает nil.
В качестве первого параметра метод принимает строку для поиска.
Синтаксис
re.FindStringSubmatch(s)
Пример
Давайте найдем первое вхождение шаблона, состоящего из трех групп,
в строке "12345":
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`(\d)(\d)(\d)`)
res := re.FindStringSubmatch("12345")
fmt.Println(res)
}
Результат выполнения кода:
[123 1 2 3]
В полученном срезе: первый элемент — полное совпадение "123",
далее элементы для каждой группы: "1", "2" и "3".
Пример
Теперь давайте проверим, что метод возвращает nil,
если совпадение не найдено:
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`\d{3}`)
res := re.FindStringSubmatch("abcde")
fmt.Println(res)
}
Результат выполнения кода:
[]
Вывод пустого среза означает, что совпадений не найдено.
Пример
Используем именованные группы для улучшения читаемости кода. Обратите внимание, что даже при использовании именованных групп, в результат сначала записывается полное совпадение, а затем значения групп в порядке их объявления:
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`(?P<first>\d)(?P<second>\d)`)
res := re.FindStringSubmatch("12345")
fmt.Println(res)
}
Результат выполнения кода:
[12 1 2]
Здесь полное совпадение — "12", затем значения групп
"first" и "second" — "1" и "2".
Смотрите также
-
метод
FindAllStringSubmatch,
который находит все совпадения в строке -
метод
FindString,
который возвращает только полное совпадение -
метод
FindSubmatch,
который работает с байтовыми срезами вместо строк -
функцию
QuoteMeta,
которая экранирует спецсимволы для использования в шаблоне