# Работа с регулярными выражениями

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

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

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

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

Код: `%сообщение% | match(r'\d')`

![](/files/-MIYxT5g_-Ag7KUvH6Ce)

Обратите внимание, что в этой цепочке у нас 2 условия:

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

Проверим работу цепочки:

![](/files/-MIYys4NvL3Irl_Tc6QB)

Если вам нужно извлечь число из сообщения, чтобы сохранить его, например, в переменную, воспользуйтесь шагом [Извлечь данные](/sozdanie-scenariev/shagi/izvlech-dannye.md).

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

Код: `%сообщение% | 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)

Код:

```
%сообщение% | match(r'[a-zA-Z0-9.!#$%&\'*+/=?^_`{|}~-]+@[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])?)*')
```

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

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

## Справка

Теорию можно посмотреть тут: <https://ru.wikipedia.org/wiki/Регулярные_выражения>

Проверить работу ваших регулярных выражений тут: <https://regex101.com>

Почитать справку по функциям для работы с регулярными выражениями в Smartbot (SmartQuery) тут: [Справочник функций](/smartquery/spravochnik-funkcii.md#regulyarnye-vyrazheniya).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.smartbot-vk.ru/smartquery/recipes/rabota-s-regulyarnymi-vyrazheniyami.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
