Wyrażenia regularne (regex lub regexp) to potężne narzędzie do wyszukiwania, zastępowania i sprawdzania poprawności tekstu za pomocą wzorców. Są używane we wszystkich językach programowania, edytorach tekstu i wierszu poleceń. Chociaż wyrażenie regularne może na pierwszy rzut oka wydawać się skomplikowane, podstawowe pojęcia są dość proste. W tym przewodniku przejdziemy od technik podstawowych do zaawansowanych.
Co to są wyrażenia regularne
Wyrażenie regularne to ciąg znaków opisujący wzór tekstu. Na przykład wyrażenie\d{3}-\d{2}-\d{2}opisuje numer telefonu w formacie „123-45-67”. Zamiast szukać określonego tekstu, regex umożliwia wyszukiwanie wedługszablon— dowolny tekst zgodny z określonym formatem.
Regex jest obsługiwany we wszystkich głównych językach programowania: JavaScript, Python, PHP, Java, C#, Go, Ruby i innych. Składnia jest w większości taka sama, chociaż istnieją niewielkie różnice między implementacjami.
Podstawowa składnia
Dosłowne znaki
Najprostszym wyrażeniem regularnym jest po prostu tekst. Wyrażeniehelloznajdzie w tekście słowo „cześć”. Większość symboli odpowiada sobie samym.
Metaznaki
Znaki specjalne mają specjalne znaczenie w wyrażeniu regularnym:
.— dowolny pojedynczy znak (z wyjątkiem nowej linii)^— początek linii$— koniec linii\d— dowolna liczba (0-9)\w— dowolna litera, cyfra lub znak podkreślenia\s— znak spacji (spacja, tabulator, nowa linia)\b— limit słów
Wielkie litery oznaczają coś odwrotnego:\D- nie liczba,\W- nie list,\S- nie spacja.
Klasy postaci
Nawiasy kwadratowe definiują zbiór znaków:
[abc]— symbol a, b lub c[a-z]— dowolna mała litera łacińska[A-Z0-9]— wielka litera lub cyfra[^abc]— dowolny symbol z wyjątkiem a, b, c[а-яА-ЯіІїЇєЄґҐ]— Listy ukraińskie
Kwantyfikatory
Kwantyfikatory określają liczbę powtórzeń:
*— 0 lub więcej razy+— 1 lub więcej razy?— 0 lub 1 raz{3}- dokładnie 3 razy{2,5}— od 2 do 5 razy{3,}— 3 lub więcej razy
Przykłady:\d+— jedną lub więcej cyfr,[a-z]{2,4}— od 2 do 4 małych liter.
Grupy i alternatywy
Grupowanie
Nawias()pogrupuj części wyrażenia i pobierz znaleziony tekst:
(\d{2})-(\d{2})-(\d{4})— data z trzema grupami (dzień, miesiąc, rok)(?:abc)— grupa bez przechwytywania (dla szybkości)
Alternatywy
Symbol|oznacza „lub”
cat|dog— „kot” lub „pies”(Mon|Tue|Wed|Thu|Fri)— dowolny dzień roboczy
Typowe szablony
Adres e-mail
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
adres URL
https?://[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(/[^\s]*)?
Telefon (Ukraina)
\+?380[\s-]?\d{2}[\s-]?\d{3}[\s-]?\d{2}[\s-]?\d{2}
Adres IPv4
\b(?:\d{1,3}\.){3}\d{1,3}\b
Data (DD.MM.RRRR)
(?:0[1-9]|[12]\d|3[01])\.(?:0[1-9]|1[0-2])\.\d{4}
Lookahead i Lookback
Zaawansowane konstrukcje sprawdzające kontekst bez uwzględniania go w wyniku:
(?=...)- pozytywne spojrzenie w przyszłość: tekst po nim musi pasować do szablonu(?!...)- negatywne spojrzenie w przód: tekst po NIE powinien pasować(?
Приклад: \d+(?= грн) — знайде числа перед " грн" (100 грн → захопить "100").
Прапорці (модифікатори)
i— нечутливий до регістру (case-insensitive)g— глобальний пошук (знайти всі збіги, не тільки перший)m— багаторядковий режим (^та$працюють для кожного рядка)s— крапка.також збігається з новим рядком
Поради для ефективного використання
- Починайте з простого — спочатку напишіть базовий шаблон, потім ускладнюйте
- Тестуйте на різних даних — перевіряйте як позитивні, так і негативні випадки
- Уникайте жадібності — використовуйте
*?та+?для лінивих квантифікаторів - Коментуйте складні вирази — використовуйте прапорець
xдля readable regex - Не парсіть HTML регулярними виразами — використовуйте DOM parser
Практика: тестуйте regex онлайн
Найкращий спосіб вивчити regex — практика. Скористайтеся нашим тестером регулярних виразів — він підсвічує збіги в реальному часі та допомагає зрозуміти, як працює ваш шаблон.
Висновок
Регулярні вирази — незамінний інструмент для будь-якого розробника. Вони дозволяють ефективно шукати, валідувати та трансформувати текст. Почніть з простих шаблонів, поступово вивчайте нові конструкції, і з часом regex стане вашим потужним союзником у роботі з текстовими даними.