Регулярні вирази (regex або regexp) — це потужний інструмент для пошуку, заміни та валідації тексту за допомогою шаблонів. Вони використовуються у всіх мовах програмування, текстових редакторах та командному рядку. Хоча regex можуть виглядати складно на перший погляд, базові концепції досить прості. У цьому гайді ми пройдемо від основ до просунутих технік.
Що таке регулярні вирази
Регулярний вираз — це послідовність символів, що описує шаблон тексту. Наприклад, вираз \d{3}-\d{2}-\d{2} описує телефонний номер формату "123-45-67". Замість пошуку конкретного тексту, regex дозволяє шукати за шаблоном — будь-який текст, що відповідає заданому формату.
Regex підтримуються у всіх основних мовах програмування: JavaScript, Python, PHP, Java, C#, Go, Ruby та інших. Синтаксис здебільшого однаковий, хоча є невеликі відмінності між реалізаціями.
Базовий синтаксис
Літеральні символи
Найпростіший регулярний вираз — це просто текст. Вираз hello знайде слово "hello" у тексті. Більшість символів відповідають самі собі.
Метасимволи
Спеціальні символи мають особливе значення в regex:
.— будь-який один символ (крім нового рядка)^— початок рядка$— кінець рядка\d— будь-яка цифра (0-9)\w— будь-яка літера, цифра або підкреслення\s— пробільний символ (пробіл, табуляція, новий рядок)\b— межа слова
Великі літери означають протилежність: \D — не цифра, \W — не літера, \S — не пробіл.
Символьні класи
Квадратні дужки визначають набір символів:
[abc]— символ a, b або c[a-z]— будь-яка мала латинська літера[A-Z0-9]— велика літера або цифра[^abc]— будь-який символ крім a, b, c[а-яА-ЯіІїЇєЄґҐ]— українські літери
Квантифікатори
Квантифікатори визначають кількість повторень:
*— 0 або більше разів+— 1 або більше разів?— 0 або 1 раз{3}— рівно 3 рази{2,5}— від 2 до 5 разів{3,}— 3 або більше разів
Приклади: \d+ — одна або більше цифр, [a-z]{2,4} — від 2 до 4 малих літер.
Групи та альтернативи
Групування
Круглі дужки () групують частини виразу та захоплюють знайдений текст:
(\d{2})-(\d{2})-(\d{4})— дата з трьома групами (день, місяць, рік)(?:abc)— група без захоплення (для швидкості)
Альтернативи
Символ | означає "або":
cat|dog— "cat" або "dog"(Mon|Tue|Wed|Thu|Fri)— будь-який робочий день
Типові шаблони
Email адреса
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
URL
https?://[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(/[^\s]*)?
Телефон (Україна)
\+?380[\s-]?\d{2}[\s-]?\d{3}[\s-]?\d{2}[\s-]?\d{2}
IPv4 адреса
\b(?:\d{1,3}\.){3}\d{1,3}\b
Дата (DD.MM.YYYY)
(?:0[1-9]|[12]\d|3[01])\.(?:0[1-9]|1[0-2])\.\d{4}
Lookahead та Lookbehind
Просунуті конструкції для перевірки контексту без включення його в результат:
(?=...)— позитивний lookahead: текст після має відповідати шаблону(?!...)— негативний lookahead: текст після НЕ має відповідати(?<=...)— позитивний lookbehind: текст перед має відповідати(? — негативний lookbehind: текст перед НЕ має відповідати
Приклад: \d+(?= грн) — знайде числа перед " грн" (100 грн → захопить "100").
Прапорці (модифікатори)
i— нечутливий до регістру (case-insensitive)g— глобальний пошук (знайти всі збіги, не тільки перший)m— багаторядковий режим (^та$працюють для кожного рядка)s— крапка.також збігається з новим рядком
Поради для ефективного використання
- Починайте з простого — спочатку напишіть базовий шаблон, потім ускладнюйте
- Тестуйте на різних даних — перевіряйте як позитивні, так і негативні випадки
- Уникайте жадібності — використовуйте
*?та+?для лінивих квантифікаторів - Коментуйте складні вирази — використовуйте прапорець
xдля readable regex - Не парсіть HTML регулярними виразами — використовуйте DOM parser
Практика: тестуйте regex онлайн
Найкращий спосіб вивчити regex — практика. Скористайтеся нашим тестером регулярних виразів — він підсвічує збіги в реальному часі та допомагає зрозуміти, як працює ваш шаблон.
Висновок
Регулярні вирази — незамінний інструмент для будь-якого розробника. Вони дозволяють ефективно шукати, валідувати та трансформувати текст. Почніть з простих шаблонів, поступово вивчайте нові конструкції, і з часом regex стане вашим потужним союзником у роботі з текстовими даними.