Работа с регулярными выражениями
Сложные условия
Last updated
Сложные условия
Last updated
Регулярные выражения позволяют проверять соответствие строки указанному шаблону, или искать подстроку по шаблону в другой строке. Это достаточно сложный, но очень мощный механизм. С его помощью можно строить сложные условия на текст сообщения пользователя.
Рассмотрим несколько примеров. В первом примере подробно описано как создать цепочку, все последующие делаются аналогично, отличается только код.
Код: %сообщение% | match(r'\d')
Обратите внимание, что в этой цепочке у нас 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})')
Код:
Код: %сообщение% | match(r'[(id|club|page|event)(\d+)|.*]')
Теорию можно посмотреть тут: https://ru.wikipedia.org/wiki/Регулярные_выражения
Проверить работу ваших регулярных выражений тут: https://regex101.com
Почитать справку по функциям для работы с регулярными выражениями в Smartbot (SmartQuery) тут: Справочник функций.