Что такое регулярное выражение? Полное объяснение
Quick Answer
Regular expression — паттерн, описывающий множество строк. Использует literal characters и metacharacters (*, +, ?, ., ^, $, [], (), {}, |, \) со специальными значениями. Regex для валидации, поиска, извлечения и замены. Используйте наш бесплатный Regex Tester.
Introduction
Regular expression (regex или regexp) — последовательность символов, определяющая search-паттерн. Паттерн используется алгоритмами string-searching для поиска, match или replace текста. Regex возник в теории формальных языков в 1950-х (Stephen Kleene) и был принят в Unix-инструменты (grep, sed, awk) в 1970-х. Сегодня regex встроен практически в каждый язык программирования и редактор.
Step by Step
-
Understand literal and metacharacters
Literal characters (a, b, 1, @) match themselves. Metacharacters have special meanings: . matches any character, * means zero or more, + means one or more, ? means zero or one, ^ matches start, $ matches end.
-
Learn character classes
Square brackets [] define a character class — [aeiou] matches any vowel, [0-9] matches any digit, [^0-9] matches any non-digit. Shorthand classes: \d (digit), \w (word character), \s (whitespace), and their uppercase negations.
-
Use quantifiers
Quantifiers specify how many times a pattern repeats: * (0+), + (1+), ? (0 or 1), {n} (exactly n), {n,} (n+), {n,m} (n to m). Greedy by default; add ? for lazy matching (e.g., *?).
-
Group and anchor
Parentheses () create capture groups. Alternation | matches either side (cat|dog). Anchors ^ and $ match start and end of string. Use these to build complex patterns from simpler ones.
Examples
Match an email-like pattern
Input: Pattern: [a-z]+@[a-z]+\.[a-z]+
Output: Matches: alice@example.com, bob@test.org
Match a phone number format
Input: Pattern: \d{3}-\d{3}-\d{4}
Output: Matches: 555-123-4567
Extract key-value pairs
Input: Pattern: (\w+)=(\w+)
Output: Matches 'key=value' with group 1 as key, group 2 as value
Common Problems
- Greedy matching over-consumes —.* matches as much as possible. Use .*? for lazy matching to find the shortest match.
- Forgetting to escape special characters —., *, +, ?, etc. are special. Use \ to match them literally (e.g., \. matches a literal dot).
- Catastrophic backtracking —patterns with nested quantifiers (e.g., (a+)+) can take exponential time on certain inputs, causing ReDoS attacks.
- Over-matching —without anchors (^ and $), a pattern matches anywhere. Use ^...$ to match the entire string.
Tips
- Start simple and add complexity incrementally —debugging a complex regex all at once is very hard.
- Use a regex tester to experiment with patterns against sample text —see matches highlighted in real time.
- Comment complex regexes using extended mode (/x flag in some engines) or break them into named parts.
- Use our Regex Tester to test patterns instantly in your browser —no signup, fully private.