Метод regexp.Regexp.FindString

Метод Regexp.FindString выполняет поиск первого совпадения с регулярным выражением в строке. Он возвращает найденную подстроку, если совпадение найдено, или пустую строку, если совпадений нет. Метод принимает один параметр - строку для поиска.

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

Синтаксис

gore.FindString(str)

где re - скомпилированное регулярное выражение, а str - строка для поиска.

Пример

Давайте найдем в строке 'abcde' первое совпадение с регулярным выражением, которое ищет символы от 'c' до 'e':

gopackage main

import (
  "fmt"
  "regexp"
)

func main() {
  re := regexp.MustCompile(`[c-e]+`)
  res := re.FindString("abcde")
  fmt.Println(res)
}

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

go"cde"

Метод нашел первое совпадение - подстроку 'cde', так как она соответствует регулярному выражению.

Пример

Давайте попробуем найти в строке 'abcde' первое совпадение с регулярным выражением, которое ищет символы от 'x' до 'z':

gopackage main

import (
  "fmt"
  "regexp"
)

func main() {
  re := regexp.MustCompile(`[x-z]+`)
  res := re.FindString("abcde")
  fmt.Println(res)
}

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

go""

Метод вернул пустую строку, так как в строке 'abcde' нет символов от 'x' до 'z'.

Пример

Давайте рассмотрим случай, когда регулярное выражение может найти пустую строку. Найдем в строке '123' первое совпадение с выражением, которое ищет последовательности из цифр, но допускает нулевое количество повторений:

gopackage main

import (
  "fmt"
  "regexp"
)

func main() {
  re := regexp.MustCompile(`\d*`)
  res := re.FindString("123")
  fmt.Println(res)
}

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

go"123"

В этом случае метод нашел самую длинную возможную подстроку '123', так как квантификатор * является жадным и старается захватить как можно больше символов.

Пример

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

gopackage main

import (
  "fmt"
  "regexp"
)

func main() {
  re := regexp.MustCompile(`[a-z]+`)
  res := re.FindString("hello world go")
  fmt.Println(res)
}

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

go"hello"

Метод нашел только первое совпадение - слово 'hello', несмотря на то, что в строке есть и другие слова.

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

  • метод Regexp.FindAllString,
    который находит все совпадения с регулярным выражением
  • метод Regexp.FindStringIndex,
    который возвращает индексы первого совпадения
  • метод Regexp.FindStringSubmatch,
    который возвращает подстроки, соответствующие подвыражениям
  • функцию regexp.MustCompile,
    которая компилирует регулярное выражение с паникой при ошибке