Основы regexp
Компилируйте и сопоставляйте шаблоны
«Основы regexp» — бесплатный урок Go Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.
Что такое регулярное выражение
Регулярное выражение (regexp) — это шаблон, который описывает множество строк. В Go для работы с регулярными выражениями используется специальный пакет.
Регулярные выражения отлично подходят для проверки и поиска текста.
package main
import (
"fmt"
"regexp"
)
func main() {
matched, _ := regexp.MatchString("go+", "gooo")
fmt.Println(matched)
}Быстрое сопоставление с помощью MatchString
regexp.MatchString(pattern, s) сообщает, встречается ли шаблон где-либо в s. Метод возвращает логическое значение и ошибку.
package main
import (
"fmt"
"regexp"
)
func main() {
ok, _ := regexp.MatchString("cat", "the cat sat")
fmt.Println(ok)
}Компиляция шаблона
Если шаблон используется многократно, скомпилируйте его один раз с помощью regexp.Compile. Функция возвращает повторно используемый *regexp.Regexp и ошибку для недопустимых шаблонов.
package main
import (
"fmt"
"regexp"
)
func main() {
re, err := regexp.Compile("[0-9]+")
fmt.Println(re.MatchString("abc123"), err)
}MustCompile для констант
regexp.MustCompile вызывает панику, если шаблон недопустим. Используйте его для фиксированных шаблонов, известных во время компиляции, обычно для переменных уровня пакета.
package main
import (
"fmt"
"regexp"
)
var digits = regexp.MustCompile("[0-9]+")
func main() {
fmt.Println(digits.MatchString("order 42"))
}Классы символов
Квадратные скобки задают множество допустимых символов. [aeiou] соответствует любой гласной, а диапазоны вроде [a-z] задают интервал символов.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("[a-z]+")
fmt.Println(re.MatchString("Hello"))
}Предопределённые классы
Сокращения упрощают работу с распространёнными наборами: \d означает цифру, \w — символ слова, а \s — пробельный символ. В строках Go экранируйте обратную косую черту.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("\\d+")
fmt.Println(re.MatchString("abc 99"))
}Квантификаторы
Квантификаторы указывают количество повторений:
*— ноль или больше,+— один или больше,?— ноль или один,{2,4}— диапазон.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("a{2,3}")
fmt.Println(re.MatchString("aaa"))
fmt.Println(re.MatchString("a"))
}Якоря
Якоря фиксируют положение совпадения: ^ означает начало текста, а $ — его конец. Используйте оба, чтобы требовать совпадения со всей строкой.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("^go$")
fmt.Println(re.MatchString("go"))
fmt.Println(re.MatchString("going"))
}Чередование и группы
Вертикальная черта | означает OR, а круглые скобки объединяют части. (cat|dog)s? соответствует вариантам cat, cats, dog или dogs.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("(cat|dog)s?")
fmt.Println(re.MatchString("dogs"))
}Проверка формата
Якорные шаблоны позволяют создавать средства проверки. Здесь мы проверяем простой код в стиле ZIP, состоящий ровно из пяти цифр.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("^\\d{5}$")
fmt.Println(re.MatchString("12345"))
fmt.Println(re.MatchString("123"))
}Сопоставление с байтами
Методы бывают в вариантах для строк и срезов байтов. Match работает с []byte, подобно MatchString.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("[0-9]+")
fmt.Println(re.Match([]byte("id7")))
}Быстрая проверка
Какая функция вызывает панику при недопустимом шаблоне и лучше всего подходит для фиксированных шаблонов?
Повторение: основы регулярных выражений
Вы изучили основные понятия:
- Быстро выполняйте сопоставление с помощью
MatchString, а шаблоны компилируйте с помощьюCompileилиMustCompile. - Создавайте шаблоны из классов, квантификаторов, якорей и групп.
- Используйте якоря
^и$для проверки всей строки.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("^[a-z]+@[a-z]+$")
fmt.Println(re.MatchString("hi@host"))
}Изучай Go с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 51
- Уроки
- 203
Часто задаваемые вопросы
Урок «Основы regexp» бесплатный?
Да — полный текст урока «Основы regexp» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «Основы regexp»?
Компилируйте и сопоставляйте шаблоны Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Основы regexp»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.