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 宏插入到用户宏上下文中时,我们需要将其放入字符串中:
- 在宏表达式周围添加引号;
- 引号需要转义;总共引入了 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)}\"}")
注意三层转义:
- 对于LLD宏函数,不转义反斜杠;
- 对于用户宏上下文,不转义反斜杠;
- 对于函数的字符串参数,转义反斜杠。
带上下文的用户宏仅在字符串内
正则表达式: \.+\"[a-z]+
带上下文的用户宏: {$MACRO:regex:"\.+\\"[a-z]+"}
某些表达式的内部字符串,例如: func(arg1, arg2, arg3)="{$MACRO:regex:\"\\.+\\\\\"[a-z]+\"}"
注意:
- 字符串也需要转义反斜杠;
- 字符串也需要转义引号;
- 同样是一个具有 2 个层级的案例:
- 对用户宏上下文进行转义时,不进行反斜杠转义;
- 它是带有反斜杠转义的字符串时,进行转义。