ДокументыИзображенияМедиаИнструменты PDF

Объяснение Regex Онлайн

Переводите регулярные выражения на понятный язык прямо в браузере.

//
1Start of string
2One of: A, -, Z, a, -, z, 0, -, 9, ., _, %, +, -, one or more times
3Literal "@"
4One of: A, -, Z, a, -, z, 0, -, 9, ., -, one or more times
5Escaped character: \.
6One of: A, -, Z, a, -, z, at least 2 times
7End of string
Processed in your browser

Объяснение регулярных выражений

Все диалекты

Совместимо с шаблонами JavaScript, Python, PCRE, Java, Go и Ruby.

100% приватно

Анализ шаблонов происходит в вашем браузере. Ваши данные не покидают устройство.

Понятное объяснение

Каждый токен шаблона объяснён на простом языке с примерами совпадений.

Мгновенно

Объяснение в реальном времени по мере ввода. Никакой регистрации и ожидания.

Три шага — никаких сложностей

1

Вставьте ваше регулярное выражение

Введите или вставьте шаблон regex, который нужно понять — с разделителями или без.

2

Мгновенное объяснение

Инструмент анализирует шаблон и описывает простыми словами, что делает каждая часть: группы, кванторы, классы символов и другие элементы.

3

Тестируйте на реальном тексте

Введите образец текста и смотрите, какие части совпадают с шаблоном в реальном времени.

Остались вопросы?

Регулярное выражение — язык шаблонов для поиска и обработки текста. Он позволяет точно описать паттерн: например, «номер телефона», «адрес электронной почты» или «URL». Движок регулярных выражений сканирует текст в поисках строк, соответствующих этому шаблону. Регулярные выражения поддерживаются практически всеми современными языками программирования.

Email: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$. URL: https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}. Международный телефон: \+?[1-9]\d{1,14}. Только цифры: ^\d+$. Почтовый индекс США: ^\d{5}(-\d{4})?$.

Регулярные выражения крайне лаконичны: каждый символ потенциально имеет специальное значение. Точка (.) соответствует любому символу. Звёздочка (*) означает «ноль или более раз». Скобки ([]) определяют классы символов. Такая информационная плотность означает, что 20-символьное выражение может описывать очень сложные правила, но при этом его трудно понять с первого взгляда без опыта.

PCRE (Perl Compatible Regular Expressions) — де-факто стандарт для PHP, Apache, nginx. У JavaScript собственный движок с отличиями: более старые версии не поддерживают lookbehind переменной длины, есть флаг /u для Unicode. Python использует модуль re со схожим с PCRE синтаксисом, но с некоторыми отличиями (например, \A и \Z для начала/конца строки). Go использует RE2 без поддержки обратных ссылок из соображений производительности. Java использует java.util.regex с расширенным POSIX-синтаксисом.

Символы со специальным значением в regex: . * + ? ^ $ { } [ ] | ( ) \. Чтобы использовать их буквально, экранируйте обратным слешем: \. для буквальной точки, \* для буквальной звёздочки. В JavaScript внутри строки требуется двойное экранирование: '\\.' — поскольку строка уже потребляет один обратный слеш. Многие языки предлагают функции вроде re.escape() в Python или preg_quote() в PHP.

История регулярных выражений (Кен Томпсон 1968, редактор ed), теория формальных языков, regex в современном программировании

Регулярные выражения восходят к теории формальных языков, разработанной математиком Стивеном Клини в 1950-х годах, определившим «регулярные множества» и алгебраическую нотацию для их описания. Кен Томпсон первым реализовал regex в программном обеспечении, интегрировав их в текстовый редактор Unix ed в 1968 году (а впоследствии в grep, название которого происходит от «global regular expression print»). Его реализация использовала компиляцию в машинный код для эффективного поиска — техника, заложившая основу для современных движков регулярных выражений.

Массовое распространение regex произошло благодаря Perl в 1980–1990-х годах. Ларри Уолл интегрировал regex нативно в синтаксис языка, а PCRE (Perl Compatible Regular Expressions) стал де-факто стандартом. POSIX формализовал два уровня: BRE (Basic Regular Expressions) и ERE (Extended Regular Expressions) в стандарте 1992 года. Сегодня практически все языки программирования включают поддержку regex: Python (модуль re), JavaScript (RegExp), Java (java.util.regex), Go (regexp/RE2), Ruby, PHP (preg_*), .NET и многие другие.

Regex — обоюдоострый инструмент: чрезвычайно мощный, но также источник уязвимостей. ReDoS (Regular Expression Denial of Service) — тип атаки, при которой плохо написанный шаблон может вызвать экспоненциальное время выполнения при определённых вредоносных входных данных. Движок RE2 от Google (используемый в Go) был специально разработан для гарантии линейного времени выполнения, исключая возможность ReDoS ценой отказа от поддержки обратных ссылок. OWASP включает ReDoS в свой список рисков безопасности веб-приложений.