Table of Contents

17 转义示例

概述

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

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

示例

带上下文的用户宏

正则表达式:\.+\"[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宏插入用户宏上下文时,需要将其放入string:
  1. 宏表达式周围添加引号;
  2. 引号需要get转义;总共引入了3个新的反斜杠。

函数的string参数(任意函数)

concat为例。

string内容:\.+\"[a-z]+
表达式:concat("abc", "\\.\\\"[a-z]+")

注意:

  • string参数需要对反斜杠和引号都进行转义。

在函数的string参数中的LLD宏函数

正则表达式:\.+\"([a-z]+)
LLD宏:{{#MACRO}.iregsub("\.+\\"([a-z]+)", \1)}
表达式:concat("abc, "{{#MACRO}.iregsub(\"\\.+\\\\\"([a-z]+)\", \\1)}")

注意:

  • string参数需要对反斜杠和引号都进行转义;
  • 另一层转义是必需的,因为宏只有在string被取消引号后才会解析;

在函数的string参数中的带上下文的用户宏

正则表达式:\.+\"[a-z]+
带上下文的用户宏:{$MACRO:regex:"\.+\\"[a-z]+"}
表达式:concat("abc, "{$MACRO:regex:\"\\.+\\\\\"[a-z]+\"}")

注意:

  • 与前一个示例相同,需要额外一层转义;
  • 反斜杠和引号仅在Top级转义时被转义(因为它是一个string参数)。

在函数中的用户宏上下文中的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. 对于函数的string参数,需要反斜杠转义。

仅在string中的带上下文的用户宏

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

注意:

  • 字符串也需要反斜杠转义;
  • 字符串也需要引号转义;
  • 再次出现2层转义的情况:
    1. 用户宏上下文的转义,不需要反斜杠转义;
    2. 作为string的转义,需要反斜杠转义。