[comment]: # translation:outdated

[comment]: # ({35ff4943-5dd1c4b4})
# 15. Примеры экранирования

[comment]: # ({/35ff4943-5dd1c4b4})

[comment]: # ({a44d3dec-b5a80d5b})
#### Обзор

На этой странице представлены примеры правильного экранирования при использовании регулярных выражений в различных контекстах.

:::notetip
При использовании конструктора триггерных выражений правильное экранирование в регулярных выражениях добавляется автоматически.
:::

[comment]: # ({/a44d3dec-b5a80d5b})

[comment]: # ({c785c1f7-51a937e8})
#### Примеры

**Пользовательский макрос с контекстом**

Регулярное выражение: `\.+\"[a-z]+`<br>
Пользовательский макрос с контекстом: `{$MACRO:regex:"\.+\\"[a-z]+"}`

Замечания:

-   обратные слэши [не экранируются](/manual/config/macros/user_macros_context#важные-замечания);
-   кавычки экранируются.
			
**Функция макросов в параметре ключа элемента данных**

Регулярное выражение: `.+:(\d+)$`<br>
Ключ элемента данных: `net.tcp.service[tcp,,"{{$ENDPOINT}.regsub(\".+:(\d+)$\",\1)}"]`

Замечания:
-   регулярное выражение внутри функции макросов `regsub` заключается в двойные кавычки (из-за того, что содержит закрывающие скобки);
-   Символы кавычек, обрамляющие регулярное выражение, экранируются (из-за того, что весь третий параметр элемента данных заключается в кавычки);
-   третий параметр ключа элемента данных заключается в кавычки, поскольку он содержит запятую.

**Функция макросов низкоуровневого обнаружения (LLD)**

Регулярное выражение: `\.+\"([a-z]+)`<br>
Макрос LLD: `{{#MACRO}.iregsub("\.+\\"([a-z]+)", \1)}`

Замечания:

-   обратные слэши не экранируются;
-   кавычки экранируются.

**Функция макросов LLD внутри контекста пользовательского макроса**

Регулярное выражение: `\.+\"([a-z]+)`<br>
Макрос LLD: `{{#MACRO}.iregsub("\.+\\"([a-z]+)", \1)}`<br>
Пользовательский макрос с контекстом: `{$MACRO:"{{#MACRO}.iregsub(\"\.+\\\"[a-z]+\", \1)}"}`

Замечания:

-   экранирование обратных слэшей для LLD не меняется;
-   при вставке макроса LLD в контекст пользовательского макроса нам нужно поместить это в строку:
   1.   Выражение макроса заключается в кавычки;
   2.   Кавычки экранируются; всего добавляется 3 новых обратных слэша.

**Строковый параметр функции (любой)** 

В качестве примера используется `concat`.

Содержимое строки: `\.+\"[a-z]+`<br>
Выражение: `concat("abc", "\\.\\\"[a-z]+")`

Замечание:

-   Строковый параметр требует экранирования как для обратных слэшей, так и для кавычек.

**Функция макросов LLD внутри строкового параметра функции**

Регулярное выражение: `\.+\"([a-z]+)`<br>
Макрос LLD: `{{#MACRO}.iregsub("\.+\\"([a-z]+)", \1)}`<br>
Выражение: `concat("abc, "{{#MACRO}.iregsub(\"\\.+\\\\\"([a-z]+)\", \\1)}")`

Замечания:

-   Строковые параметры требуют экранирования как для обратных слэшей, так и для кавычек;
-   Добавляется ещё один уровень экранирования, так как макрос будет раскрыт только после раскрытия кавычек в строке;

**Пользовательский макрос с контекстом внутри строкового параметра функции**

Регулярное выражение: `\.+\"[a-z]+`<br>
Пользовательский макрос с контекстом: `{$MACRO:regex:"\.+\\"[a-z]+"}`<br>
Выражение: `concat("abc, "{$MACRO:regex:\"\\.+\\\\\"[a-z]+\"}")`

Замечания:

-   Как и в предыдущем примере, необходим дополнительный уровень экранирования;
-   Обратные слэши и кавычки экранируются только для экранирования верхнего уровня (поскольку это строковый параметр).

**Функция макросов LLD внутри контекста пользовательского макроса внутри функции**

Регулярное выражение: `\.+\"([a-z])+`<br>
Макрос LLD: `{{#MACRO}.iregsub("\.+\\"([a-z]+)", \1)}`<br>
Пользовательский макрос с контекстом: `{$MACRO:"{{#MACRO}.iregsub(\"\.+\\\"([a-z]+)\", \1)}"}`<br>
Выражение: `concat("abc, "{$MACRO:\"{{#MACRO}.iregsub(\\\"\.+\\\\\\\"([a-z]+)\\\", \\1)}\"}")`

Замечания по трём уровням экранирования:

   1. Для функции макросов LLD, без экранирования обратных слэшей;
   2. Для пользовательского макроса с контекстом, без экранирования обратных слэшей;
   3. Для строкового параметра функции, с экранированием обратных слэшей.

**Пользовательский макрос с контекстом просто внутри строки**

Регулярное выражение: `\.+\"[a-z]+`<br>
Пользовательский макрос с контекстом: `{$MACRO:regex:"\.+\\"[a-z]+"}`<br>
Внутри строки некоторого выражения, например: `func(arg1, arg2, arg3)="{$MACRO:regex:\"\\.+\\\\\"[a-z]+\"}"`

Замечания:

-   Строки также требуют экранирования обратных слэшей;
-   Строки также требуют экранирования кавычек;
-   Снова случай с двумя уровнями экранирования:
	1. Экранирование для контекста пользовательского макроса — без экранирования обратных слэшей;
	2. Экранирование, поскольку это строка — с экранированием обратных слэшей.

[comment]: # ({/c785c1f7-51a937e8})
