Шпаргалка регулярних виразів
Регулярні вирази досить компактні, тому синтаксис легше знайти, ніж запам’ятати. На цій сторінці представлено все на одному екрані — класи, квантори, прив’язки, групи, огляд, екранування та прапори — з робочим прикладом для кожного рядка.
Різновидом є JavaScript, який працює у вашому браузері та який використовує тестер регулярних виразів на цьому сайті. Більшість з них ідентична в Python, Java, Go та PCRE; де смаки розходяться, вони розходяться на краях — підтримка огляду назад, синтаксис іменованих груп і те, чи \d означає «цифру ASCII» чи «будь-яку цифру Unicode».
Більшість сюрпризів викликають дві речі. Квантори жадібні: вони беруть усе, що можуть, і віддають назад лише тоді, коли решта шаблону не працює, тому <.+> ковтає два теги, а <.+?> ні. І чергування зв’язує найслабше, тому ^a|b$ означає «починається з a або закінчується b» — не те, що більшість людей мають на увазі, коли пишуть це.
Класи персонажів
Скорочення призначені лише для ASCII, якщо ви не додасте прапорець u та не використаєте екранування властивостей Unicode.
| Синтаксис | Значення | приклад |
|---|---|---|
| . | Будь-який символ, крім розриву рядкаДодайте прапорець s, щоб він також відповідав новому рядку. | /a.c/"abc" → "abc" |
| \d | Цифра 0–9 | /\d+/"order 42" → "42" |
| \D | Усе, що не є цифрою | /\D+/"42abc" → "abc" |
| \w | Літера, цифра або підкресленняЛише ASCII — "é" не є \w. | /\w+/"user_1!" → "user_1" |
| \W | Ніщо \w не збігається | /\W+/"a++b" → "++" |
| \s | Будь-які пробіли, включаючи табуляцію та нові рядки | /\s+/"a \t b" → " \t " |
| \S | Будь-який непробільний символ | /\S+/" hi" → "hi" |
| [abc] | Будь-який із перелічених символів | /[aeiou]/"rhythm and" → "a" |
| [^abc] | Будь-який персонаж, крім перелічених | /[^aeiou ]+/"aeiou xyz" → "xyz" |
| [a-z] | Різноманітність символів | /[a-f]+/"zzabcz" → "abc" |
| \p{L} | Будь-яка літера Unicode (потрібен прапор u) | /\p{L}+/"42 café" → "café" |
Квантори
Усі вони за замовчуванням жадібні: вони беруть стільки, скільки можуть, і віддають, лише якщо решта шаблону не вдається.
| Синтаксис | Значення | приклад |
|---|---|---|
| * | Нуль або більше | /ab*/"a" → "a" |
| + | Один або більше | /ab+/"abbb" → "abbb" |
| ? | Нуль або один — робить це необов’язковим | /colou?r/"color" → "color" |
| {3} | Рівно три | /\d{3}/"id 12345" → "123" |
| {2,} | Два або більше | /a{2,}/"aaa" → "aaa" |
| {2,4} | Між двома і чотирма | /a{2,4}/"aaaaa" → "aaaa" |
| *? | Ледачий — бере якомога меншеЖадібний <.+> проковтнув би обидва теги. | /<.+?>/"<a><b>" → "<a>" |
Анкери та межі
Вони відповідають позиції, а не персонажу, тому нічого не споживають.
| Синтаксис | Значення | приклад |
|---|---|---|
| ^ | Початок рядка або рядка з прапорцем m | /^a/"abc" → "a" |
| $ | Кінець рядка або рядка з прапорцем m | /c$/"abc" → "c" |
| \b | Кордон словаЦе те, що зупиняє відповідність "cat" всередині "concatenate". | /\bcat\b/"the cat sat" → "cat" |
| \B | Без межі слів | /\Bcat/"concatenate" → "cat" |
Групи та чергування
| Синтаксис | Значення | приклад |
|---|---|---|
| (abc) | Група захоплення — запам'ятовується для заміни | /(\d+)-(\d+)/"10-20" → "10-20" |
| (?:abc) | Групування без захопленняВикористовуйте це, коли вам потрібно лише групування; це зберігає значення захоплених чисел. | /(?:ab)+/"abab" → "abab" |
| (?<name>…) | Названа група захоплення | /(?<year>\d{4})/"in 2026" → "2026" |
| a|b | У будь-який бік — чергуванняЧергування має найнижчий пріоритет: ^a|b$ — це «^a» або «b$», а не «^(a|b)$». | /cat|dog/"one dog" → "dog" |
| \1 | Посилання на першу групу | /(\w)\1/"letter" → "tt" |
огляд
Твердження про те, що оточує позицію. Самі по собі вони нічого не поєднують, що робить їх безпечними для поєднання.
| Синтаксис | Значення | приклад |
|---|---|---|
| (?=…) | Lookahead — потім це | /\d+(?= kg)/"80 kg" → "80" |
| (?!…) | Негативний прогноз — не супроводжується цим | /\d+(?! kg)/"80 lb" → "80" |
| (?<=…) | Lookbehind — перед цим | /(?<=\$)\d+/"costs $40" → "40" |
| (?<!…) | Негативний погляд назад — цьому не передувало | /(?<!\$)\b\d+/"about 40" → "40" |
Втеча
Ці дванадцять символів потребують зворотної похилої риски, щоб їх розуміти буквально.
| Синтаксис | Значення | приклад |
|---|---|---|
| \. | Буквальна крапка | /\d\.\d/"v2.5" → "2.5" |
| \\ | Буквальний зворотний слеш | /\\/"C:\\dir" → "\\" |
| \n | Перехід рядка | /a\nb/"a\nb" → "a\nb" |
| \t | Вкладка | /a\tb/"a\tb" → "a\tb" |
| \uFFFF | Символ за його кодовою точкою | /\u00e9/"café" → "é" |
Прапори
| Прапор | Ім'я | Значення |
|---|---|---|
| g | Глобальний | Знайдіть кожен збіг, а не лише перший. |
| i | Ігнорувати регістр | Збіг незалежно від верхнього чи нижнього регістру. |
| m | Багаторядковий | Встановлює збіг ^ і $ на кожному розриві рядка, а не лише на кінцях рядка. |
| s | Крапка все | дозволяє . відповідні розриви рядків також. |
| u | Unicode | Розглядає шаблон як кодові точки та вмикає екранування властивості \p{…}. |
| y | Липкий | Збігається лише з останнім індексом, без пошуку вперед. |