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. 引号被转义;总共,引入了3个新反斜杠。

函数的 string 参数(任意)

concat 作为示例使用。

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

请注意:

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

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

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

请注意:

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