Если вам нравится читать статьи на 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 и найдите прекрасную работу