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

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

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

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

Регулярное выражение: \.+\"[a-z]+

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

Замечания:

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

Функция макросов низкоуровневого обнаружения (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 в контекст пользовательского макроса нужно поместить это в строку;
  • выражение макроса заключается в кавычки;
  • кавычки экранируются; всего добавляется 3 новых обратных слеша.

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

Содержимое строки: \.+\"[a-z]+

Выражение: concat("abc", "\\.\\\"[a-z]+")

Замечание:

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

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

Содержимое строки: \.+\"[a-z]+

Выражение: find(__ITEM_KEY__,,"regexp","\.+\\"[a-z]+")

Замечания:

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

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

Регулярное выражение: \.+\"[a-z]+

Макрос LLD: {{#MACRO}.iregsub("\.+\\"[a-z]+", \1)}

Выражение: concat("abc, "{{#MACRO}.iregsub(\"\\.+\\\\\"[a-z]+\", \\1)}")

Замечания:

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

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

Регулярное выражение: \.+\"[a-z]+

Макрос LLD: {{#MACRO}.iregsub("\.+\\"[a-z]+", \1)}

Выражение: find(__ITEM_KEY__,,"eq","{{#MACRO}.iregsub(\"\.+\\\"[a-z]+\", \1)}")

Замечания:

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

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

Регулярное выражение: \.+\"[a-z]+

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

Выражение: concat("abc, "{$MACRO:regex:\"\\.+\\\\\"[a-z]+\"}")

Замечания:

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

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

Регулярное выражение: \.+\"[a-z]+

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

Выражение: find(__ITEM_KEY__,,"eq","{$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)}\"}")

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

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

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

Регулярное выражение: \.+\"[a-z]+

Макрос LLD: {{#MACRO}.iregsub("\.+\\"[a-z]+", \1)}

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

Выражение: find(__ITEM_KEY__,,"eq","{$MACRO:\"{{#MACRO}.iregsub(\\".+\\\\"[a-z]+\\", \1)}\"}")

Замечания:

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

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

Регулярное выражение: \.+\"[a-z]+

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

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

Замечания:

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