Регулярное выражение (Regular Expression, сокращённо Regex/RegExp) — это язык текстовых шаблонов, который описывает и сопоставляет ряд строк, соответствующих определённым синтаксическим правилам, с помощью одной строки. Его история восходит к математической модели нейронов, предложенной неврологом Уорреном Мак-Каллоком и математиком Уолтером Питтсом в 1950-х годах, позже математик Стивен Клини в 1956 году на этой основе предложил алгебраическое описание «регулярных множеств». Отец Unix Кен Томпсон в конце 1960-х впервые реализовал регулярные выражения в редакторе QED, после чего регулярные выражения стали основной функцией цепочки инструментов Unix (grep, sed, awk, vi).
В современных языках программирования регулярные выражения — это практически стандартная возможность — RegExp в JavaScript, модуль re в Python, java.util.regex в Java, класс Regex в .NET, пакет regexp в Go — все они обеспечивают поддержку регулярных выражений. Регулярные выражения широко применяются в таких сценариях, как проверка форм (email/номер телефона/удостоверение личности), поиск и замена текста (поиск и замена в редакторах), анализ логов (извлечение логов ERROR), веб-пауки (извлечение HTML-контента), очистка данных (ETL), сопоставление маршрутов, фильтрация ввода и защита безопасности (правила WAF).
Основные понятия регулярных выражений включают: классы символов (\d цифры, \w символы слов, \s пробелы), квантификаторы (* ноль или больше, + один или больше, ? ноль или один, {n,m} указанное количество раз), якорные символы (^ начало, $ конец, \b граница слова), группы (... группа захвата, (?:...) незахватывающая группа, (?<name>...) именованная группа), альтернация (|), наборы символов ([a-z]), просмотр вокруг ((?=...) положительный предпросмотр, (?!) отрицательный предпросмотр) и т.д. Освоение регулярных выражений значительно повышает эффективность обработки текста, но также следует помнить о защите от таких ловушек производительности, как ReDoS.