2022 Zabbix中国峰会
2022 Zabbix中国峰会
Table of Contents

18 转义示例

概述

本页提供了在各种上下文中使用正则表达式时正确使用转义的示例。

使用触发器表达式构造函数时,会自动添加正则表达式中的正确转义。

示例

具有上下文的用户宏

正则表达式 \.+\"[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 个新的反斜杠。

函数的字符串参数 (any)

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)}\"}")

注意三层转义:

  1. 对于LLD宏函数,不转义反斜杠;
  2. 对于用户宏上下文,不转义反斜杠;
  3. 对于函数的字符串参数,转义反斜杠。

带上下文的用户宏仅在字符串内

正则表达式: \.+\"[a-z]+
带上下文的用户宏: {$MACRO:regex:"\.+\\"[a-z]+"}
某些表达式的内部字符串,例如: func(arg1, arg2, arg3)="{$MACRO:regex:\"\\.+\\\\\"[a-z]+\"}"

注意:

  • 字符串也需要转义反斜杠;
  • 字符串也需要转义引号;
  • 同样是一个具有 2 个层级的案例:
    1. 对用户宏上下文进行转义时,不进行反斜杠转义;
    2. 它是带有反斜杠转义的字符串时,进行转义。