Lols bot - Регулярные выражения
Lols BotРегулярные выражения - это язык описания шаблонов для поиска по тексту. В @lolsbot используется упрощённая версия RE2 - в ней проход по тексту происходит исключительно слева-направо, что упрощает само выражение и оптимизирует скорость его работы.
Обычно регулярные выражения начинаются и заканчиваются специальными маркерами (разделителями), но при настройке в Lols их использовать не нужно. Кроме того, для упрощения игнорируется регистр символов, поэтому достаточно писать только символы в нижнем регистре.
Чтобы сразу погрузиться, предлагаю начать со сложного примера:
[uюу]+.?[$зsсc]+.?[dд]+.?[tт]+
Данное регулярное выражение "найдёт" строки содержащие:
➖ usdt
➖ ussssdt
➖ u$d!t
➖ U зDT
➖ юс дт
Разберём по порядку использованные в выражении конструкции:
⬤ [ ] - квадратные скобки обозначают набор символов. В них может быть как просто перечисление всех по одному, так и использование диапазонов, например a-z, а-я, 0-9. В нашем примере регулярное выражение будет проходить по сообщению пользователя до тех пор, пока не найдёт в нём одну из букв: u, ю или у.
⬤ + - квантификатор. Если предполагается единичный символ - то никакого квантификатора указывать не нужно. В нашем примере указан плюс, что означает любое количество повторений указанных символов подряд будет воспринято регулярным выражением.
⬤ . - оператор который заменяет собой любой символ. Вместе с следующим за ним квантификатором ? он говорит, что в этой позиции может стоять любой символ, а может ничего не быть.
Далее повторяются аналогичные конструкции для следующих символов. В итоге получается регулярное выражение, которое ловит не просто usdt, а множество различных вариаций написания.
Кроме указанных выше конструкций поддерживаются также:
⬤ Якоря: ^ и $ - первый можно написать в начале выражения, а второй в конце - они будут обозначать то, что выражение обязательно должно смотреть в начало или до конца строки. Без них поиск шаблона выполняется в любом месте текста.
⬤ Отрицание: [^ ] - если тот же символ крышечки указан не в начале выражения, а в начале набора символов - то он означает что в текущей позиции должен быть любой символ, кроме перечисленных внутри набора. Если он указан в другой позиции набора символов - то он будет воспринят как обычный символ из набора.
⬤ Группы: ( ) - аналогично квадратным скобкам, но для слов. Подробнее о них в следующем пункте:
⬤ Альтернативы: | - можно использовать для перечисления слов или суффиксов. Простой пример с перечислением слов: крипта|работа|p2p. Более сложный пример с использованием групп и альтернатив: (куплю|покупаю|скупаю) крипту - внутри скобок указывается несколько вариантов слов, в итоге выражение сработает на три фразы: куплю крипту, покупаю крипту и скупаю крипту. В данном случае скобки являются оператором и в тексте не ищутся.
⬤ Квантификаторы: ?, +, *, {X,Y} - их можно указать после символа, набора символов или группы слов и они будут обозначать количество повторений. Вопросительный знак подразумевает ноль или одно повторение. Знак плюса будет искать от одного и до бесконечности повторений. Звёздочка объединяет плюс и вопросительный знак и ищет от нуля до бесконечности повторений. И можно указать конкретное количество символов "от и до" используя квантификатор {X,Y} (или просто {X,} для варианта "от")
⬤ Различные шорткаты:
➖ \R - любой перенос строки (как \r\n, так и \n и другие подобные символы)
➖ \p{Cyrillic}, \p{Latin}, \p{Han}, \p{Arabic} - наборы алфавитов
➖ \d - заменяет [0-9], \D заменяет [^0-9]
➖ \w - заменяет [A-Za-z0-9_], \W заменяет [^A-Za-z0-9_]
➖ \s - заменяет [ \t\n\r\f], \S заменяет [^ \t\n\r\f]
➖ \b - граница слова, \B - отрицание для границы слова
🔙 Триггеры