16 Примеры экранирования

Обзор

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

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

Примеры

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

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

Обратите внимание:

Функция макроса внутри параметра ключа элемента данных

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

Обратите внимание:

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

Функция LLD-макроса

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

Обратите внимание:

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

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

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

Обратите внимание:

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

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

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

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

Обратите внимание:

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

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

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

Обратите внимание:

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

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

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

Обратите внимание:

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

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

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

Обратите внимание на три уровня экранирования:

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

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

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

Обратите внимание:

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