Примеры экранирования
В этом разделе представлены примеры правильного экранирования при использовании регулярных выражений в различных контекстах.
При использовании конструктора триггерных выражений правильное экранирование в регулярных выражениях добавляется автоматически.
Пользовательский макрос с контекстом:
Регулярное выражение: .+"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+"}"
Замечания:
- строки также требуют экранирования обратных слешей;
- строки также требуют экранирования кавычек;
- снова случай с двумя уровнями экранирования:
- экранирование для контекста пользовательского макроса; без экранирования обратных слешей;
- экранирование, поскольку это строка; с экранированием обратных слешей.