16 Примеры экранирования
Обзор
На этой странице приведены примеры правильного экранирования при использовании регулярных выражений в различных контекстах.
При использовании конструктора выражений триггеров правильное экранирование в регулярных выражениях добавляется автоматически.
Примеры
Пользовательский макрос с контекстом
Регулярное выражение: \.+\"[a-z]+
Пользовательский макрос с контекстом: {$MACRO:regex:"\.+\\"[a-z]+"}
Обратите внимание:
- обратные слеши не экранируются;
- кавычки экранируются.
Функция макроса внутри параметра ключа элемента данных
Регулярное выражение: .+:(\d+)$
Ключ элемента данных: net.tcp.service[tcp,,"{{$ENDPOINT}.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 новых обратных слеша.
Строковый параметр функции (любой)
В качестве примера используется concat.
Содержимое строки: \.+\"[a-z]+
Выражение: concat("abc", "\\.\\\"[a-z]+")
Обратите внимание:
- строковые параметры требуют экранирования как обратных слешей, так и кавычек.
Функция LLD-макроса внутри строкового параметра функции
Регулярное выражение: \.+\"([a-z]+)
LLD-макрос: {{#MACRO}.iregsub("\.+\\"([a-z]+)", \1)}
Выражение: concat("abc, "{{#MACRO}.iregsub(\"\\.+\\\\\"([a-z]+)\", \\1)}")
Обратите внимание:
- строковые параметры требуют экранирования как обратных слешей, так и кавычек;
- добавляется еще один уровень экранирования, поскольку макрос будет разрешен только после снятия кавычек со строки;
Пользовательский макрос с контекстом внутри строкового параметра функции
Регулярное выражение: \.+\"[a-z]+
Пользовательский макрос с контекстом: {$MACRO:regex:"\.+\\"[a-z]+"}
Выражение: concat("abc, "{$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-макроса, без экранирования обратных слешей;
- Для пользовательского макроса с контекстом, без экранирования обратных слешей;
- Для строкового параметра функции, с экранированием обратных слешей.
Пользовательский макрос с контекстом просто внутри строки
Регулярное выражение: \.+\"[a-z]+
Пользовательский макрос с контекстом: {$MACRO:regex:"\.+\\"[a-z]+"}
Внутри строки некоторого выражения, например: func(arg1, arg2, arg3)="{$MACRO:regex:\"\\.+\\\\\"[a-z]+\"}"
Обратите внимание:
- строки также требуют экранирования обратных слешей;
- строки также требуют экранирования кавычек;
- снова случай с 2 уровнями экранирования:
- Экранирование для контекста пользовательского макроса без экранирования обратных слешей;
- Экранирование из-за того, что это строка, с экранированием обратных слешей.