Триває набір нової групи на курс Enterprise Patterns! Старт курсу 02.12.2024. Реєструйтеся зі знижкою 30% до 31.10.2024!
Дізнатися більше
18.09.2024
8 хвилин читання

Регулярні вирази в Golang

Регулярні вирази (або JS дієслова) є потужним інструментом для пошуку і маніпуляції рядків, який широко використовується в різних мовах програмування і утилітах командного рядка. Вони дають змогу розробникам виконувати складні текстові операції, як-от пошук, заміна та витяг даних із рядків, з високою ефективністю та мінімальними витратами часу. Це особливо корисно під час роботи з великими обсягами тексту, файлами логів і даними, які потребують регулярного аналізу та обробки. У цій статті ми розглянемо основи роботи з регулярними виразами на мові програмування Go, або як її ще називають golang регулярні вирази. Якщо ви тільки починаєте вивчати мову Golang або хочете поглибити свої знання, настійно рекомендуємо ознайомитися з навчальним курсом з Golang від FoxmindEd.

🚀 Менторинг з Golang від FoxmindEd! 🚀 Працюйте над реальними завданнями, отримуйте досвід та ставайте Golang розробником разом з FoxmindEd! 💡
Дізнатись більше

Основи регулярних виразів

Регулярні вирази (регекси) є потужним інструментом для роботи з текстом, що дає змогу виконувати складні операції з пошуку та заміни, сортування та перевірки даних. Основами регулярних виразів є символи, метасимволи, групи та класи символів. Давайте розглянемо кожну з цих концепцій докладніше.

Символи

Символи в регулярних виразах являють собою основні будівельні блоки. Вони містять усі літери, цифри та інші знаки, які можна зустріти в тексті. Наприклад, регулярний вираз hello збігатиметься з будь-яким рядком, що містить слово “hello”. У цьому випадку h, e, l, l і o є символами.

Метасимволи

Метасимволи – це спеціальні символи, які мають особливе значення в контексті регулярних виразів. Наприклад:

. (крапка) – цей метасимвол позначає будь-який одиночний символ, крім символу нового рядка.

Групи

Групи використовуються для об’єднання кількох символів або підвиразів у єдине ціле, до якого можна застосовувати оператори. Групи створюються за допомогою круглих дужок ( ). Наприклад, регулярний вираз (abc)+ шукатиме одну або кілька послідовних груп символів “abc”.

Також групам можна присвоювати імена для подальшого звернення до них. Це робиться за допомогою конструкції (?…). Наприклад, регулярний вираз (?\w+)\s(?\w+) виділить у рядку два слова, розділені пропуском, і збереже перше слово в групі з ім’ям “first”, а друге – у групі “last”.

Регулярные выражения golang

Класи символів

Класи символів дають змогу задати набір символів, серед яких відбуватиметься пошук. Вони укладаються в квадратні дужки [ ]. Наприклад, [0-9] означає будь-який символ від 0 до 9, а [a-zA-Z] – будь-яку букву латинського алфавіту незалежно від регістру. Спеціальні символи можна використовувати всередині класів символів, щоб задавати складні шаблони пошуку. Наприклад, клас символів [a-zA-Z0-9] відповідатиме будь-якій букві або цифрі.

Go регулярні вирази

Говорячи про використання регулярок у різних мовах програмування, не можна не згадати про регулярні вирази. Мова Go надає потужні можливості для роботи з регулярними виразами через стандартну бібліотеку. Основний пакет для цієї роботи – regexp. Він дозволяє компілювати регулярні вирази, виконувати пошук і заміну, а також розбивати рядки на частини. Використовуйте знання про go регулярні вирази для поліпшення своїх навичок програмування та роботи з даними.

Регулярні вирази в Go: основні пакети та функції

У мові програмування Go робота з регулярними виразами здійснюється за допомогою пакета regexp, який надає набір інструментів для виконання операцій з пошуку та обробки рядків з використанням регулярних виразів. Цей пакет базується на стандартах синтаксису регулярних виразів і пропонує потужні можливості для роботи з текстовими даними.

Пакет regexp містить безліч функцій і методів для зручної роботи з регулярними виразами. Ось деякі з них:

Compile

FindString

FindAllString

ReplaceAllString

Split

Регулярні вирази golang значно спрощують обробку текстових даних і підвищують продуктивність розробки.

Приклади використання регулярних виразів у Go

Регулярні вирази дають змогу ефективно розв’язувати безліч завдань, пов’язаних із пошуком і обробкою текстової інформації. У мові програмування Go, пакет regexp надає всі необхідні інструменти для роботи з регулярними виразами. Розглянемо кілька прикладів, що демонструють, як за допомогою go regexp можна розв’язувати різні завдання.

Перевірте формат електронної пошти

Одним із поширених завдань є перевірка правильності формату email-адреси. Приклад коду для цього завдання може мати такий вигляд:

package main

import (

    "fmt"

    "regexp"

)

func main() {

    email := "example@test.com"

    regex := `^\w+@\w+\.\w+$`

    matched, _ := regexp.MatchString(regex, email)

    if matched {

        fmt.Println("Коректний email")

    } else {

        fmt.Println("Некоректний email")

    }

}

У цьому прикладі використовується регулярний вираз ^\w+@\w+.\w+$, який перевіряє, чи відповідає рядок стандартному формату email-адреси. Функція regexp. MatchString повертає true, якщо рядок відповідає регулярному виразу.

Витяг даних із рядка

Регулярні вирази також корисні під час вилучення даних із рядкового формату. Наприклад, припустимо, що у нас є рядок, який містить дату у форматі “YYYY-MM-DD”. Нам потрібно витягти рік, місяць і день.

package main

import (

    "fmt"

    "regexp"

)

func main() {

    text := "Дата: 2023-10-15"

    regex := `(\d{4})-(\d{2})-(\d{2})`

    r := regexp.MustCompile(regex)

    matches := r.FindStringSubmatch(text)

    if len(matches) > 0 {

        fmt.Printf("Рік: %s, Місяць: %s, День: %s\n", matches[1], matches[2], matches[3])

    } else {

        fmt.Println("Дата не знайдена")

    }

}

У цьому прикладі використовується регулярний вираз (\d{4})-(\d{2})-(\d{2}) для пошуку та вилучення компонентів дати. Функція FindStringSubmatch повертає зріз рядків, що містить усі підрядки, які підходять під групу виразів у дужках.

Заміна підрядків

Інше типове завдання – замінювати підрядки, що відповідають певним патернам. Розглянемо, як можна замінити всі входження чисел на текст “NUMBER”.

package main

import (

    "fmt"

    "regexp"

)

func main() {

    text := "У мене 2 яблука і 3 апельсини."

    regex := `\d+`

    r := regexp.MustCompile(regex)

    result := r.ReplaceAllString(text, "NUMBER")

    fmt.Println(result)

}

У цьому прикладі регулярний вираз \d+ використовується для пошуку всіх чисел у вихідному рядку. Метод ReplaceAllString замінює всі знайдені числа на слово “NUMBER”.

Утиліти для роботи з регулярними виразами в Go

Написання і тестування регулярних виразів може бути складним і вимагати значних зусиль, тому тут на допомогу приходять різні онлайн-утиліти, які полегшують цей процес.

Однією з найкорисніших утиліт є Go Playground, яка дає змогу тестувати код на Go прямо в браузері. Цей інструмент особливо корисний для перевірки та налагодження регулярних виразів. У Go Playground ви можете швидко написати невелику програму, що містить регулярний вираз, і відразу побачити результат виконання.

Іншою корисною онлайн-утилітою є go regexp online. Цей інструмент дозволяє миттєво перевірити правильність регулярних виразів, введених користувачем. Він підтримує різні режими і типи пошуку, що робить його незамінним для швидкого налагодження.

Підпишіться на наш Ютуб-канал! Корисні відео для програмістів чекають на вас! YouTube
Оберіть свій курс програмування! Шлях до кар’єри програміста починається тут! Подивитись

Поради та найкращі практики

Розглянемо головні рекомендації:

  1. Пишіть регулярні вирази поступово: Замість того щоб створювати складний регулярний вираз одразу, почніть із простих патернів і поступово ускладнюйте їх. Це допоможе краще зрозуміти, як працює ваш go regex, і уникнути заплутаних і складно налагоджуваних конструкцій.
  2. Використовуйте коментарі та пробіли: Ви можете зробити свої регулярні вирази більш читабельними, додаючи коментарі та пробіли. У Go це можна зробити за допомогою прапора (?x), який дає змогу ігнорувати пробільні символи та додавати коментарі. Це особливо корисно під час роботи з довгими та складними регулярними виразами.
  3. Уникайте непотрібних групувань: Групування в регулярних виразах необхідне для створення підмножини або застосування квантифікаторів, але надмірне використання круглих дужок може збільшити складність і знизити продуктивність. Оптимізуйте свій go regex, використовуючи групування тільки там, де це дійсно необхідно.

Дотримуючись цих рекомендацій, ви зможете створювати ефективні регулярні вирази в Go, уникаючи типових помилок і пасток.

Часті запитання

Під час роботи з великими файлами важливо не завантажувати весь файл у пам’ять. Використовуйте пакет bufio для читання файлу порядково або шматками, що дасть змогу обробляти дані поступово і зменшить споживання пам’яті.

Для підвищення продуктивності вашого go regex уникайте використання жадібних квантифікаторів таких як .*, коли це можливо. Замість цього використовуйте більш конкретні патерни і ледачі квантифікатори, такі як .*?, щоб мінімізувати кількість перевірок.

Одна з поширених помилок – це неправильне екранування спецсимволів. У go regex метасимволи, як-от крапки, зірочки та дужки, мають бути екрановані за допомогою зворотного слеша (). Ще одна помилка – це надмірне використання групувань, що може зробити вираз заплутаним і складним для підтримки.

Висновок

Отже, ми обговорили основні моменти, що стосуються використання регулярних виразів у Go, включно з обробкою великих файлів та оптимізацією продуктивності. Ці поради допоможуть вам уникнути поширених помилок і поліпшити ефективність ваших програм. Відкрийте для себе можливості регулярних виразів, впровадивши їх у свої проєкти на Go, і переконайтеся, наскільки вони можуть спростити обробку текстових даних!

Хочете дізнатися більше про регулярні вирази в golang? Задайте своє питання або поділіться коментарем нижче! 🤔👇

Додати коментар

Ваш імейл не буде опубліковано. Обов'язкові поля відзначені *

Зберегти моє ім'я, імейл та адресу сайту у цьому браузері для майбутніх коментарів