17. Примеры экранирования
Обзор
На этой странице представлены примеры правильного экранирования при использовании регулярных выражений в различных контекстах.
При использовании конструктора триггерных выражений правильное экранирование в регулярных выражениях добавляется автоматически.
Примеры
Пользовательский макрос с контекстом
Регулярное выражение: \.+\"[a-z]+
Пользовательский макрос с контекстом: {$MACRO:regex:"\.+\\"[a-z]+"}
Замечания:
- обратные слэши не экранируются;
- кавычки экранируются.
Функция макросов в параметре ключа элемента данных
Регулярное выражение: .+:(\d+)$
Ключ элемента данных: net.tcp.service[tcp,,"{{ITEM.VALUE}.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 в контекст пользовательского макроса нам нужно поместить это в строку:
- Выражение макроса заключается в кавычки;
- Кавычки экранируются; всего добавляется 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]+\"}"
Замечания:
- Строки также требуют экранирования обратных слэшей;
- Строки также требуют экранирования кавычек;
- Снова случай с двумя уровнями экранирования:
- Экранирование для контекста пользовательского макроса — без экранирования обратных слэшей;
- Экранирование, поскольку это строка — с экранированием обратных слэшей.