Регулярные выражения в фильтрах и заменах

Регулярное выражение описывает, какой текст нужно найти. Вместо одной точной фразы вы задаёте шаблон: например, слово «Заявка» и любой номер после него. Номер может меняться в каждом сообщении, а шаблон всё равно найдёт нужный фрагмент.

Так можно искать даты, ссылки, отдельные слова, целые строки и почти любые сочетания текста, которые можно описать правилом. Несколько простых символов позволяют учитывать меняющиеся значения, выбирать из разных вариантов и пропускать ненужное. Возможности такого поиска гораздо шире обычного поиска по слову.

Поиск совпадающих фрагментов текста по шаблону

Возможности регулярных выражений

Поддержка регулярных выражений в фильтрах и заменах FLOWIN позволяет:

  • Добавлять в начало или в конец сообщений любой текст.
  • Фильтровать сообщения со ссылками.
  • Удалять ссылки, телефоны, почту и прочую контактную информацию из копируемых сообщений.
  • Фильтровать длинные сообщения или, наоборот, только короткие.

Режим «Regexp»

В настройках фильтра или замены режим «Regexp» рядом с полем «Искать» включает поиск по регулярному выражению. Сам шаблон задаётся в этом поле. Создание правила и его применение к пересылке описаны в инструкциях по фильтрам и заменам.

Режим Regexp рядом с полем Искать в настройках замены
«Regexp» в настройках замены.

Как читать регулярное выражение

Начнём с шаблона Заявка №\d+. Он находит и Заявка №125, и Заявка №8072, хотя номера разные. Прочитаем его слева направо:

  • Заявка № ищет именно эти буквы, пробел и знак номера.
  • \d обозначает любую цифру от 0 до 9.
  • + требует одну или несколько таких цифр подряд.

Найденный фрагмент называют совпадением. В сообщении Заявка №125 принята совпадением будет Заявка №125, а слово принята останется за его пределами. В фильтре совпадение помогает определить, подходит ли сообщение под условие; в замене оно указывает, какой фрагмент изменить.

Обычные буквы и пробелы в шаблоне ищутся как написаны. Специальные символы задают правила. Ниже разобраны основные обозначения, а затем собраны готовые примеры для разных задач.

Синтаксис регулярок

Чтобы начать использовать регулярные выражения, нужно знать синтаксис, то есть понимать, что обозначают определённые символы.

Основные символы

  • ^ обозначает начало текста.
  • $ обозначает конец текста.
  • . соответствует любому символу, включая перенос строки.
  • \d соответствует цифре от 0 до 9.
  • \w соответствует латинской букве, цифре или знаку подчёркивания.
  • \n обозначает перенос строки.
  • \t обозначает табуляцию.
  • \s соответствует обычному пробелу, табуляции, переносу строки, возврату каретки или переводу страницы.
  • \b проверяет границу слова, например между буквой и пробелом. Сам символ в совпадение не добавляет.

Количественные символы

Количественные символы указывают, сколько раз повторяется символ или группа перед ними. Группа объединяет несколько символов в круглых скобках.

  • * означает 0 и более раз.
  • + означает 1 и более раз.
  • ? означает 0 или 1 раз.
  • {5} означает ровно 5 раз.
  • {1,5} означает от 1 до 5 раз.
  • {1,} означает 1 и более раз.
  • {0,5} означает от 0 до 5 раз.

Например:

  • a+ соответствует a, aa, aaa и так далее.
  • .* соответствует любому тексту, даже пустому.
  • аб{3} соответствует аббб.

Группы

Круглые скобки ( ) объединяют символы в группу. Группы чаще всего используют с количественными символами или с вертикальной чертой |, которая обозначает логическое ИЛИ.

Например:

  • ((Bob)|(Alice)) соответствует как Bob, так и Alice.
  • (abc){3} соответствует abcabcabc.

Набор символов

Для указания набора символов используются квадратные скобки [ ]. Внутри них символы можно перечислить так:

  • [а-яё] соответствует любой букве русского алфавита.
  • [абвгд] или [а-д] соответствует одной из букв а, б, в, г или д.
  • [a-z] соответствует любой букве латиницы от a до z.
  • [0-5] соответствует любой цифре от 0 до 5.

Символ ^ в начале набора обозначает логическое НЕ:

  • [^а-яё] соответствует любому символу, кроме буквы русского алфавита.
  • [^a-z] соответствует любому символу, кроме буквы латиницы от a до z.
  • [^\s] соответствует любому символу, который не входит в \s.

В FLOWIN \w не включает кириллицу. [а-яё] охватывает русский алфавит, включая ё. В диапазон [а-я] эта буква не входит.

Экранирование символов

Если служебный символ нужен как обычный текст, а не как часть синтаксиса, перед ним ставится обратный слеш \. Это называется экранированием.

Например:

  • :\) соответствует :). Скобка здесь обозначает обычную скобку, а не группу.
  • кто\? соответствует кто?. Знак вопроса здесь не задаёт количество повторений.

Настройки поиска в FLOWIN

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

Флаги уже настроены

В фильтрах и заменах включены IgnoreCase (i), Singleline (s), RE2 и Unicode. Добавлять их вручную к каждому шаблону не нужно. Вот что важно на практике:

  • i отключает различие регистра: кот найдёт и Кот, и КОТ.
  • s разрешает точке . находить перенос строки. Поэтому .* может захватить несколько строк сразу.
  • Многострочный режим Multiline (m) по умолчанию выключен: ^ и $ относятся к началу и концу всего сообщения, а не каждой строки.
  • RE2 задаёт особенности синтаксиса: \d ищет цифры 0–9, а \w только латинские буквы, цифры и подчёркивание. Включённый Unicode не добавляет кириллицу в \w.

Для готовых примеров ниже ничего переключать не требуется. Если проверяете их в другом сервисе, учитывайте эти настройки: совпадение названий флагов ещё не гарантирует одинаковое поведение разных движков.

Готовые шаблоны

Выберите задачу и скопируйте шаблон в поле «Искать» с режимом «Regexp». В примерах показан именно найденный текст. Что затем произойдёт с сообщением, зависит от настроенного фильтра или замены.

Номер заявки, который каждый раз меняется

Найти заявку, не зная её номера заранее.

Шаблон:
Заявка №\d+

Текст: Заявка №125 принята. Заявка №8072 ожидает ответа.

Найдёт: Заявка №125, Заявка №8072.

Текст «Заявка №» остаётся постоянным, а \d+ находит одну или несколько цифр подряд. Пробел перед № тоже входит в шаблон. «Заявка №ABC» не подойдёт.

Сообщение только из шести цифр

Отобрать сообщения, в которых находится ровно шестизначный код.

Шаблон:
^\d{6}$

Текст: 482901

Найдёт: 482901.

Начало и конец ограничивают всё сообщение, а {6} задаёт шесть цифр. «Код: 482901», «48290» и «482901 » с пробелом в конце не подойдут.

Один из нескольких вариантов текста

Найти сообщения с упоминанием одного из двух статусов.

Шаблон:
готово|отменено

Текст: Готово: файл отправлен. Другое задание отменено.

Найдёт: Готово, отменено.

Вертикальная черта означает «или». Регистр букв не важен. Без границ слова шаблон найдёт «готово» и внутри слова «готового».

Слово целиком, без совпадений внутри других слов

Найти слово «кот», пропуская «котёнок» и «скот».

Шаблон:
\bкот\b

Текст: Кот, котёнок и скот.

Найдёт: Кот.

\b по обе стороны проверяет границы слова. Пробелы и пунктуация могут отделять слово от соседнего текста; сами они в совпадение не входят.

Дата в формате день.месяц.год

Найти дату, у которой день и месяц записаны двумя цифрами, а год четырьмя.

Шаблон:
\d{2}\.\d{2}\.\d{4}

Текст: Встреча 16.10.2026 в 12:00.

Найдёт: 16.10.2026.

\. обозначает обычную точку, а не любой символ. Шаблон проверяет форму записи, но не календарь: «99.99.2026» тоже совпадёт.

Хештеги на русском и английском

Найти хештеги из букв, цифр и знаков подчёркивания.

Шаблон:
#[а-яёa-z0-9_]+

Текст: #Новости #release_2 #всё_готово

Найдёт: #Новости, #release_2, #всё_готово.

После # идёт один или несколько символов из набора. Пробел или дефис завершит совпадение: в «#план-дня» будет найдено только «#план».

Упоминания вида @username

Найти текст, похожий на упоминание пользователя или канала.

Шаблон:
@[a-z0-9_]{3,}

Текст: Автор: @news_room. Ещё один: @ab.

Найдёт: @news_room.

После @ нужны хотя бы три буквы латиницы, цифры или знака подчёркивания. Шаблон ищет форму записи, а не проверяет существование пользователя. Он также может найти часть адреса электронной почты.

Найти явно записанный веб-адрес с протоколом.

Шаблон:
https?:\/\/[^\s]+

Текст: Откройте https://example.org/page и http://example.org

Найдёт: https://example.org/page, http://example.org.

Буква s необязательна. После // шаблон забирает символы до ближайшего пробела или другого разделителя из \s. Адрес без протокола не подойдёт, а запятая или точка вплотную к адресу могут попасть в совпадение.

Телефон в записи +7 и десять цифр

Найти номер, записанный слитно, без скобок, пробелов и дефисов.

Шаблон:
\+7\d{10}

Текст: Контакт: +79991234567

Найдёт: +79991234567.

\+ ищет обычный плюс, а \d{10} задаёт ровно десять следующих за 7 цифр. Вариант «+7 (999) 123-45-67» не совпадёт. Это поиск по форме записи, не проверка существования номера; внутри более длинной цепочки цифр тоже возможно совпадение.

Сообщения, которые начинаются с нужной пометки

Найти пометку «Важно:» только в самом начале сообщения.

Шаблон:
^Важно:

Текст: ВАЖНО: встреча перенесена.

Найдёт: ВАЖНО:.

^ проверяет начало всего текста. В «Обновление: Важно: встреча перенесена» совпадения не будет. Пометка в начале второй строки тоже не подойдёт, поскольку многострочный режим по умолчанию выключен.

Лишние пробелы между словами

Найти два или больше обычных пробела подряд, чтобы затем заменить их одним.

Шаблон:
[ ]{2,}

В тексте Текст··с···пробелами будут найдены две группы: два и три пробела. Знак · здесь только показывает обычный пробел; вводить его не нужно.

Внутри квадратных скобок стоит обычный пробел, а {2,} требует хотя бы два подряд. Чтобы убрать лишние пробелы, найденные фрагменты заменяют одним пробелом. Переносы строк такой шаблон не затрагивает.

Короткие сообщения до ста символов

Отобрать непустые сообщения длиной от 1 до 100 символов.

Шаблон:
^.{1,100}$

Текст: Короткое сообщение

Найдёт: Короткое сообщение.

Точка считает любые символы, в том числе пробелы и переносы строк. Скобки задают пределы, а ^ и $ требуют проверить сообщение целиком. Пустое сообщение и текст длиннее 100 символов не подойдут. Составной эмодзи может считаться несколькими символами.

Список будет пополняться. Предложения новых шаблонов можно отправить в поддержку @value_maker.

Проверка своего шаблона

На regex101.com удобно проверять собственные регулярные выражения. Настройки поиска там могут отличаться от FLOWIN, поэтому перед применением к рабочей пересылке нужна проверка на тестовых сообщениях: с ожидаемым совпадением и без него.

Частые вопросы

Когда достаточно «Текст» или «Список», а когда нужен «Regexp»?

Режим «Текст» подходит для одной известной фразы, а «Список» позволяет перечислить несколько вариантов. «Regexp» нужен, когда текст меняется по правилу: например, после слова «Заявка» каждый раз стоит новый номер. Он также помогает задать границы слова или количество символов. Действие с найденным сообщением настраивается отдельно в фильтре или замене.

Почему выражение из онлайн-тестера работает в FLOWIN иначе?

Результат зависит от движка и настроек поиска. В фильтрах и заменах FLOWIN уже включены IgnoreCase, Singleline, RE2 и Unicode, а Multiline по умолчанию выключен. Поэтому регистр букв не различается, точка может найти перенос строки, а ^ и $ относятся ко всему сообщению. Сверьте настройки поиска и проверьте выражение в FLOWIN на сообщениях с ожидаемым совпадением и без него.

Почему .* захватывает несколько строк?

В FLOWIN включён Singleline: точка соответствует и переносу строки. Поэтому .* не обязано останавливаться в конце первой строки. Если нужно найти текст до ближайшего переноса, можно использовать [^\r\n]+: этот шаблон ищет один или несколько символов, кроме возврата каретки и переноса строки.

Почему \w не находит русские буквы?

В настройках поиска FLOWIN \w охватывает латинские буквы, цифры и подчёркивание. Для русских букв используйте [а-яё], а для последовательности таких букв [а-яё]+. Букву ё нужно указывать отдельно: диапазон а-я её не включает. Большие и маленькие буквы различать не требуется, поскольку поиск уже не учитывает регистр.

Как найти слово целиком, а не внутри другого слова?

Добавьте \b с обеих сторон слова. Например, \bкот\b найдёт «Кот» в тексте «Кот, котёнок и скот», но пропустит два других слова. Границы проверяют положение слова, а пробелы и знаки препинания в найденный фрагмент не входят.

Шаблон даты из примера проверяет, существует ли такая дата?

Нет. Выражение \d{2}\.\d{2}\.\d{4} проверяет только форму записи: две цифры, точка, две цифры, точка и четыре цифры. Поэтому оно найдёт и 16.10.2026, и 99.99.2026. Этот пример подходит для поиска похожих на дату фрагментов, но не подтверждает правильность дня и месяца.

Что проверить, если регулярное выражение ничего не находит?

Сначала убедитесь, что рядом с полем «Искать» выбран «Regexp». Затем сравните шаблон с исходным текстом: пробелы, переносы строк и обычные знаки тоже влияют на совпадение. Например, Заявка №\d+ требует пробел перед № и цифры после него, поэтому не найдёт Заявка№125 или Заявка №ABC. Проверьте также границы ^ и $: по умолчанию они относятся ко всему сообщению. Начните с простого фрагмента и добавляйте условия по одному, каждый раз проверяя результат.