[comment]: # ({ef775bfd-da69ac43})
# 17. Примеры экранирования

[comment]: # ({/ef775bfd-da69ac43})

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

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

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

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

[comment]: # ({5cc50e18-137e19de})
#### Примеры

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

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

Замечания:

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

Регулярное выражение: `.+:(\d+)$`<br>
Ключ элемента данных: `net.tcp.service[tcp,,"{{ITEM.VALUE}.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 новых обратных слэша.

**Строковый параметр функции, не относящейся к истории** 

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

Замечание:

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

**Строковый параметр функции истории** 

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

Замечания:

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

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

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

Замечания:

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

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

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

Замечания:

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

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

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

Замечания:

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

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

Регулярное выражение: `\.+\"[a-z]+`<br>
Пользовательский макрос с контекстом: `{$MACRO:regex:"\.+\\"[a-z]+"}`<br>
Выражение: `find(__ITEM_KEY__,,"eq","{$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. Для строкового параметра функции, с экранированием обратных слэшей.

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

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

Замечания:

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

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

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

Замечания:

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

[comment]: # ({/5cc50e18-137e19de})
