SmartBot
Search…
Работа с регулярными выражениями
Сложные условия
Регулярные выражения позволяют проверять соответствие строки указанному шаблону, или искать подстроку по шаблону в другой строке. Это достаточно сложный, но очень мощный механизм. С его помощью можно строить сложные условия на текст сообщения пользователя.

Примеры использования

Рассмотрим несколько примеров. В первом примере подробно описано как создать цепочку, все последующие делаются аналогично, отличается только код.

Цепочка, которая срабатывает на сообщения, которые содержат число

Код: %сообщение% | match(r'\d')
Обратите внимание, что в этой цепочке у нас 2 условия:
  1. 1.
    Условие на сообщение — это условие обязательное для всех цепочек, но так как в данном случае нам не с чем сравнивать строку, то можно просто сравнить его с самим собой. Если вы используете регулярные выражение в условиях группы шагов (внутри блока), то это первое условие вам не нужно.
  2. 2.
    Сложное условие (SQ) — вот тут мы как раз и используем регулярное выражение. В данном случае регулярное выражение очень простое: \d. Оно обозначает, что в сообщении должна быть хотя бы одна цифра (d - digit). Символ r перед кавычками обозначает, что обратные слеши (\) в строке дальше следует воспринимать как обычные символы, а не как управляющие последовательности для перевода строки, возврата каретки и т.п. В общем лучше просто всегда ставьте его перед строкой с регулярным выражением.
Проверим работу цепочки:
Если вам нужно извлечь число из сообщения, чтобы сохранить его, например, в переменную, воспользуйтесь шагом Извлечь данные.

Цепочка, которая срабатывает, если в сообщении есть латинские буквы

Код: %сообщение% | lower | match('[a-z]')
Пояснение: lower меняет регистр сообщения на нижний (TeST -> test), [a-z] означает "любой символ, начиная с a и заканчивая z включительно). Вы можете указать любое другой набор символов, или даже несколько сразу:
  • [a-zа-я] — символ от a до z и от а до я
  • [abcdef] — один из указанных символов

Цепочка, которая срабатывает, если в сообщении есть ссылка

Код: %сообщение% | match(r'http(s)?://')
Пояснение: (s)? обозначает, что s не является обязательным.

Цепочка, которая срабатывает, если в сообщении есть номер телефона

Код: %сообщение% | match(r'\+?\d{0,2}(\(\d{3}\))?((\d{0,4}[- ]\d{2,4}){2,4}|\d{7,10})')

Цепочка, которая срабатывает, если в сообщении есть почта (email)

Код:
1
%сообщение% | match(r'[a-zA-Z0-9.!#$%&\'*+/=?^_`{|}~-][email protected][a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*')
Copied!

Цепочка, которая срабатывает на упоминание (человека или группы)

Код: %сообщение% | match(r'[(id|club|page|event)(\d+)|.*]')

Справка

Теорию можно посмотреть тут: https://ru.wikipedia.org/wiki/Регулярные_выражения
Проверить работу ваших регулярных выражений тут: https://regex101.com
Почитать справку по функциям для работы с регулярными выражениями в Smartbot (SmartQuery) тут: Справочник функций.