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 宏插入到用户宏上下文时,需要将其放入字符串中:
    1. 在宏表达式两侧添加引号;
    2. 引号需要转义;总共会新增 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)}\"}")

注意这里有三层转义:

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

仅位于字符串中的带上下文用户宏

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

注意:

  • 字符串同样要求对反斜杠进行转义;
  • 字符串同样要求对引号进行转义;
  • 这同样是一个包含 2 层转义的情况:
    1. 对用户宏上下文进行转义,不对反斜杠进行转义;
    2. 由于它是一个带反斜杠转义的字符串,因此还需要再进行一层转义。