Если вам нравится читать статьи на Medium и вы заинтересованы в том, чтобы стать участником, я буду рад поделиться с вами своей реферальной ссылкой!
Регулярные выражения — мощный инструмент в арсенале любого разработчика программного обеспечения. Они позволяют выполнять сложное сопоставление с образцом и манипулировать строками. В Go эта мощь реализуется через пакет regexp
. Эта статья служит шпаргалкой по использованию регулярных выражений в Go, включая различные методы и примеры их использования.
Простое сопоставление с образцом
Это проверяет, соответствует ли шаблон строке:
match, _ := regexp.MatchString("p([a-z]+)ch", "peach") fmt.Println(match)
Эта строка проверяет, соответствует ли строка «персик» шаблону «p([az]+)ch». Если он совпадает, match
будет true
.
Компиляция структуры регулярного выражения
Для других задач regexp
вам потребуется скомпилировать оптимизированную структуру Regexp
:
r, _ := regexp.Compile("p([a-z]+)ch")
После создания структуры Regexp
мы можем использовать для нее множество методов.
Тест матча
Вот тест на совпадение, который мы видели ранее:
fmt.Println(r.MatchString("peach"))
Метод MatchString
проверяет, соответствует ли строка шаблону, как и regexp.MatchString
.
Поиск совпадений
Метод FindString
находит совпадение для регулярного выражения:
fmt.Println(r.FindString("peach punch"))
Метод FindStringIndex
возвращает начальный и конечный индексы совпадения вместо совпадающего текста:
fmt.Println("idx:", r.FindStringIndex("peach punch"))
Метод FindStringSubmatch
возвращает информацию как о совпадениях всего шаблона, так и о подсовпадениях внутри этих совпадений:
fmt.Println(r.FindStringSubmatch("peach punch"))
Аналогично, FindStringSubmatchIndex
возвращает информацию об индексах совпадений и подсовпадений:
fmt.Println(r.FindStringSubmatchIndex("peach punch"))
Поиск всех совпадений
Метод FindAllString
применяется ко всем совпадениям во входных данных, а не только к первому:
fmt.Println(r.FindAllString("peach punch pinch", -1))
Аргумент -1
указывает функции найти все совпадения.
Ограничение количества совпадений
Предоставление неотрицательного целого числа в качестве второго аргумента этих функций ограничит количество совпадений:
fmt.Println(r.FindAllString("peach punch pinch", 2))
Это возвращает только первые два совпадения.
Использование байтовых срезов
Мы также можем предоставить []byte
аргументов и убрать String
из имени функции:
fmt.Println(r.Match([]byte("peach")))
Создание глобальных переменных
При создании глобальных переменных с помощью регулярных выражений вы можете использовать MustCompile
вариант Compile
. MustCompile
вызывает панику вместо возврата ошибки, что делает его более безопасным для использования с глобальными переменными:
r = regexp.MustCompile("p([a-z]+)ch") fmt.Println("regexp:", r)
Замена подмножеств строк
Метод ReplaceAllString
может заменять подмножества строк другими значениями:
fmt.Println(r.ReplaceAllString("a peach", "<fruit>"))
Метод ReplaceAllFunc
позволяет преобразовать совпадающий текст с заданной функцией:
in := []byte("a peach") out := r.ReplaceAllFunc(in, bytes.ToUpper) fmt.Println(string(out))
Это заменяет «персик» на «ПЕРСИК» во входной строке.
Заключение
Поняв и применяя эти методы из пакета regexp
, вы сможете эффективно использовать мощь регулярных выражений в своих программах на Go. Если вы сопоставляете простые шаблоны, ищете несколько экземпляров шаблона или манипулируете строками на основе регулярных выражений, пакет regexp
в Go поможет вам.
Важно помнить, что хотя регулярные выражения и являются мощным инструментом, их следует использовать с осторожностью. Сложные регулярные выражения могут быть трудными для чтения и понимания, что усложняет поддержку вашего кода. Таким образом, всегда стремитесь к простоте и ясности при использовании регулярных выражений в своем коде.
Не забывайте правильно обрабатывать ошибки при работе с пакетом regexp
. Например, regexp.Compile
и regexp.MatchString
могут возвращать ошибки, если шаблон регулярного выражения недействителен.
Имея в виду эти мощные методы и лучшие практики, вы теперь можете использовать регулярные выражения, чтобы сделать ваши программы Go более надежными и гибкими.
Повышение уровня кодирования
Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь:
- 👏 Хлопайте за историю и подписывайтесь на автора 👉
- 📰 Смотрите больше контента в публикации Level Up Coding
- 💰 Бесплатный курс собеседования по программированию ⇒ Просмотреть курс
- 🔔 Подписывайтесь на нас: Twitter | ЛинкедИн | "Новостная рассылка"
🚀👉 Присоединяйтесь к коллективу талантов Level Up и найдите прекрасную работу