Table of Contents

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宏插入自定义宏上下文时,需要放入string:
  1. 在宏表达式周围添加引号;
  2. 引号get需要转义; 总共引入了3个新的反斜杠.

非历史函数的string参数

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

注意:

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

历史函数的string参数

string内容: \.+\"[a-z]+
表达式: find(__ITEM_KEY__,,"regexp","\.+\\"[a-z]+")

注意:

  • 反斜杠不需要转义;
  • 引号需要转义.

LLD宏函数在非历史函数的string参数内部

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

注意:

  • string参数需要对反斜杠和引号都进行转义;
  • 由于宏只在string解引用后才会解析,因此需要额外增加一层转义;

LLD宏函数在历史函数的string参数内部

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

注意:

  • 反斜杠不需要转义;
  • 引号需要转义.

带上下文的自定义宏在非历史函数的string参数内部

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

注意:

  • 与前例相同,需要额外增加一层转义;
  • 反斜杠和引号仅因作为string参数而需要为Top级别转义.

带上下文的自定义宏在历史函数的string参数内部

正则表达式: \.+\"[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)}\"}")

注意三层转义:

  1. 对于LLD宏函数,反斜杠不需要转义;
    1. 对于带上下文的自定义宏,反斜杠不需要转义;
    2. 对于函数的string参数,反斜杠需要转义.

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

注意:

  • 反斜杠不需要转义;
  • 引号需要转义.

带上下文的自定义宏仅位于string内部

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

注意:

  • 字符串也需要反斜杠转义;
  • 字符串也需要引号转义;
  • 再次出现两层转义的情况:
    1. 对于自定义宏上下文的反斜杠不转义;
    2. 对于作为string的反斜杠需要转义.