Toolyard

Основы регулярных выражений: руководство для начинающих с примерами

Что такое регулярное выражение

Регулярное выражение — это шаблон для поиска текста. cat находит буквы «cat» где угодно, в том числе в «concatenate». Специальные символы позволяют шаблону описывать виды текста, а не точные буквы.

Строительные блоки

.любой один символ, кроме перевода строки
\d, \w, \sцифра; буква, цифра или подчёркивание; пробел, табуляция или перевод строки
[aeiou], [^0-9]любой один из этих символов; любой символ, кроме цифры
*, +, ?ноль или больше, один или больше, ноль или один раз то, что стоит перед ними
{3}, {2,4}ровно 3; от 2 до 4
^, $начало и конец текста (или каждой строки с флагом m)
\bграница слова: \bcat\b находит «cat», но не «concatenate»
( ), |группа, которую можно использовать в замене; это или то

Чтобы найти сам специальный символ, поставьте перед ним обратную косую черту: \. находит точку. В JavaScript \w и \b по умолчанию понимают только латиницу; для кириллицы используйте класс вроде [а-яё] или флаг u с \p{L}.

Примеры

  • \d{3}-\d{2}-\d{2} находит номера, записанные как 555-01-23.
  • ^[ \t]+|[ \t]+$ с флагами g и m находит пробелы и табуляции в начале и конце каждой строки, чтобы заменить их пустотой.
  • (\d{4})-(\d{2})-(\d{2}) с заменой на $3.$2.$1 превращает 2024-09-27 в 27.09.2024.

Флаги и жадность

Флаг g находит все совпадения, а не первое, i не учитывает регистр, а m заставляет ^ и $ работать построчно. Квантификаторы жадные: <.*> захватывает от первого < до последнего > в строке. Добавьте ?, чтобы они останавливались как можно раньше: <.*?>.

Пробуйте шаблоны с подсветкой в реальном времени в Проверка регулярных выражений, где используется синтаксис JavaScript, и применяйте их к своему тексту в Найти и заменить.

Шаблоны для повседневных задач

Что найтиШаблон
Пустые строки^\s*$ с флагом m
Повторяющиеся пробелы {2,}, замена на один пробел
Всё в скобках\([^)]*\)
Цена в рублях\d+(,\d{2})? ₽
HTML-тег<[^>]+>
Последнее поле строки CSV[^,]+$ с флагом m

Перестановка с группами

Поиск (\w+), (\w+) с заменой на $2 $1 превращает «Smith, John» в «John Smith» по всему списку. Для кириллических имён используйте ([а-яёА-ЯЁ]+), ([а-яёА-ЯЁ]+). Каждая пара скобок нумеруется слева, а $0 — всё совпадение.

Частые ошибки

  • Забыть, что точка означает любой символ. file.txt находит и «fileXtxt». Пишите file\.txt.
  • Жадные квантификаторы берут слишком много. ".*" в строке с двумя строками в кавычках находит всё от первой кавычки до последней. Используйте ".*?".
  • Думать, что у всех инструментов один синтаксис. Ретроспективная проверка, именованные группы и \d внутри символьных классов различаются в JavaScript, Python, grep и вашем редакторе.
  • Пытаться разбирать вложенные структуры. В HTML, JSON и коде есть вложенность, за которой регулярное выражение не уследит. Используйте парсер, а регулярные выражения оставьте для плоского текста.
  • Шаблон, который зависает. Вложенные квантификаторы вроде (a+)+b на длинной несовпадающей строке могут работать экспоненциально долго. Упростите шаблон.

Инструменты из этого руководства

Другие руководства