Метод regexp.Regexp.FindStringSubmatch

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

Синтаксис

gore.FindStringSubmatch(s)

Пример

Давайте найдем первое вхождение шаблона, состоящего из трех групп, в строке "12345":

gopackage main

import (
  "fmt"
  "regexp"
)

func main() {
  re := regexp.MustCompile(`(\d)(\d)(\d)`)
  res := re.FindStringSubmatch("12345")
  fmt.Println(res)
}

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

go[123 1 2 3]

В полученном срезе: первый элемент — полное совпадение "123", далее элементы для каждой группы: "1", "2" и "3".

Пример

Теперь давайте проверим, что метод возвращает nil, если совпадение не найдено:

gopackage main

import (
  "fmt"
  "regexp"
)

func main() {
  re := regexp.MustCompile(`\d{3}`)
  res := re.FindStringSubmatch("abcde")
  fmt.Println(res)
}

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

go[]

Вывод пустого среза означает, что совпадений не найдено.

Пример

Используем именованные группы для улучшения читаемости кода. Обратите внимание, что даже при использовании именованных групп, в результат сначала записывается полное совпадение, а затем значения групп в порядке их объявления:

gopackage main

import (
  "fmt"
  "regexp"
)

func main() {
  re := regexp.MustCompile(`(?P<first>\d)(?P<second>\d)`)
  res := re.FindStringSubmatch("12345")
  fmt.Println(res)
}

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

go[12 1 2]

Здесь полное совпадение — "12", затем значения групп "first" и "second" — "1" и "2".

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

  • метод FindAllStringSubmatch,
    который находит все совпадения в строке
  • метод FindString,
    который возвращает только полное совпадение
  • метод FindSubmatch,
    который работает с байтовыми срезами вместо строк
  • функцию QuoteMeta,
    которая экранирует спецсимволы для использования в шаблоне