Go Academy · Урок

Поиск и извлечение

Используйте FindString и подсовпадения

Урок 2 из 413 шагов

«Поиск и извлечение» — бесплатный урок Go Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.

Помимо сопоставления

Сопоставление сообщает, существует ли шаблон. Семейство функций Find сообщает, что совпало и где, поэтому с его помощью можно извлекать данные.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    fmt.Println(re.FindString("order 42 ready"))
}

FindString

FindString(s) возвращает первое совпадение в виде строки или пустую строку, если совпадений нет.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[a-z]+")
    fmt.Printf("%q\n", re.FindString("123abc456"))
}

FindAllString

FindAllString(s, n) возвращает все совпадения в виде среза. Передайте -1, чтобы получить все совпадения, или положительное ограничение.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    fmt.Println(re.FindAllString("a1 b22 c333", -1))
}

Ограничение результатов

Передайте положительное значение n, чтобы остановиться после указанного количества совпадений.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    fmt.Println(re.FindAllString("1 2 3 4", 2))
}

Поиск индекса

FindStringIndex(s) возвращает позиции начала и конца первого совпадения в байтах в виде среза из двух элементов.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("cat")
    fmt.Println(re.FindStringIndex("a cat here"))
}

Группы захвата

Круглые скобки создают группы захвата. FindStringSubmatch возвращает сначала всё совпадение, а затем каждую захваченную группу.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(\\d+)-(\\d+)")
    m := re.FindStringSubmatch("12-34")
    fmt.Println(m)
}

Использование значений подсовпадений

Обращайтесь к элементам среза подсовпадений по индексу: элемент 0 — это полное совпадение, элемент 1 — первая группа и так далее.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(\\d+):(\\d+)")
    m := re.FindStringSubmatch("09:30")
    fmt.Println("hour", m[1], "min", m[2])
}

Именованные группы

Дайте группе имя с помощью (?P<name>...), а затем получите её через SubexpNames вместе со срезом подсовпадений.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(?P<area>\\d{3})-(?P<num>\\d{4})")
    m := re.FindStringSubmatch("555-1234")
    for i, name := range re.SubexpNames() {
        if name != "" {
            fmt.Println(name, m[i])
        }
    }
}

Все подсовпадения

FindAllStringSubmatch(s, n) возвращает срез срезов подсовпадений — по одному для каждого совпадения. Это удобно для разбора большого количества записей.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(\\w+)=(\\d+)")
    all := re.FindAllStringSubmatch("x=1 y=2", -1)
    for _, m := range all {
        fmt.Println(m[1], m[2])
    }
}

Поведение при отсутствии совпадений

Если ничего не совпало, методы Find возвращают пустую строку или срез nil. Проверяйте результат перед обращением по индексу, чтобы избежать паники.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    m := re.FindStringSubmatch("no digits")
    fmt.Println(m == nil)
}

Извлечение реальных данных

Объединяйте группы, чтобы извлекать структурированные поля из строки текста.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(\\d{4})-(\\d{2})-(\\d{2})")
    m := re.FindStringSubmatch("date: 2026-05-30")
    fmt.Println("year", m[1])
}

Быстрая проверка

Какой элемент среза подсовпадений содержит всё совпадение?

Повторение: поиск и извлечение

Теперь вы умеете извлекать данные из текста:

  • FindString и FindAllString возвращают совпадения.
  • FindStringSubmatch возвращает полное совпадение вместе с группами захвата.
  • Используйте именованные группы и проверяйте значение nil, если совпадений нет.
package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(\\w+)@(\\w+)")
    m := re.FindStringSubmatch("user@host")
    fmt.Println(m[1], "at", m[2])
}
Можно начать бесплатно

Изучай Go с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
51
Уроки
203

Часто задаваемые вопросы

Урок «Поиск и извлечение» бесплатный?

Да — полный текст урока «Поиск и извлечение» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.

Чему я научусь в уроке «Поиск и извлечение»?

Используйте FindString и подсовпадения Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Go Academy?

Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Поиск и извлечение»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Go Academy?

Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Основы regexp
  2. Поиск и извлечение
  3. Замена текста
  4. Советы по производительности
← Назад к Go Academy