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

Обзор

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

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

Примеры

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

Регулярное выражение: \.+\"[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 в контекст пользовательского макроса нам нужно поместить это в строку:
  1. Выражение макроса заключается в кавычки;
  2. Кавычки экранируются; всего добавляется 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)}\"}")

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

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

Функция макросов 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]+\"}"

Замечания:

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