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

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

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

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

Регулярное выражение: .+"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+"}"

Замечания:

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