Lols bot - Регулярные выражения

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 - отрицание для границы слова


🔙 Триггеры

Report Page