正则表达式
概述
Zabbix 支持 Perl 兼容正则表达式(PCRE、PCRE2)。
在 Zabbix 中使用正则表达式有两种方式:
- 手动输入正则表达式
- 使用在 Zabbix 中创建的全局正则表达式
正则表达式
您可以在支持的位置手动输入正则表达式。
请注意,表达式不能以 @ 开头,因为在 Zabbix 中该符号用于引用全局正则表达式。
使用正则表达式时,可能会耗尽栈内存。 有关更多信息,请参见 PCRE PERFORMANCE。
请注意,在多行匹配中,^ 和 $ 锚点分别匹配每一行的开头和结尾,而不是整个字符串的开头和结尾。
另请参见在各种上下文中正确转义的示例。
全局正则表达式
Zabbix 在前端提供了一个高级编辑器,用于创建和测试复杂的正则表达式。
要访问它,请转到 Administration > General > Regular expressions。
Zabbix 在其默认数据集中包含若干预定义的全局正则表达式。

您可以按名称和描述筛选正则表达式列表,以找到所需的表达式。
配置
要创建全局正则表达式,请单击 创建正则表达式,并在表单中输入正则表达式参数。

所有必填输入字段都用红色星号标记。
| 参数 | 说明 | |
|---|---|---|
| 名称 | 设置正则表达式名称。允许使用任何 Unicode 字符。 | |
| 表达式 | 单击 表达式 部分中的 添加,以添加新的子表达式。 | |
| 表达式类型 | 选择表达式类型: 包含字符串 - 匹配子字符串。 包含列表中的任意子字符串 - 匹配由分隔符分隔的列表中的任意子字符串。分隔列表可以使用逗号 ,、点号 . 或斜杠 /。不包含字符串 - 匹配除该子字符串之外的任意字符串。 匹配正则表达式 - 匹配该正则表达式。 不匹配正则表达式 - 不匹配该正则表达式。 |
|
| 表达式 | 输入子字符串/正则表达式。 最大长度:2048 个字符。 |
|
| 分隔符 | 用于在正则表达式中分隔文本字符串的逗号 ,、点号 . 或斜杠 /。仅当选择 包含列表中的任意子字符串 表达式类型时,此参数才可用。 |
|
| 区分大小写 | 一个复选框,用于指定正则表达式是否区分字母大小写。 | |
| 描述 | 输入该正则表达式的描述。 | |
| 测试表达式 | 用于测试正则表达式的值。 | |
表达式中的斜杠 / 会按字面含义处理,而不是作为分隔符。
这样就可以在不出错的情况下保存包含斜杠的表达式。
Zabbix 中的自定义正则表达式名称可以包含逗号、空格等字符。
在某些情况下,这可能会导致引用时产生歧义(例如,监控项键参数中的逗号),此时整个引用可以用引号括起来,例如:"\@My custom regexp for purpose1, purpose2"。
在其他位置(例如 LLD 规则属性中),正则表达式名称不得加引号。
创建正则表达式后,可以在前端的多个位置通过其名称进行引用,名称前加 @,例如 @mycustomregexp。
表单按钮
表单底部的按钮可让您执行各种操作:
| Button | Description |
|---|---|
![]() |
添加一个正则表达式。此按钮仅适用于新的正则表达式。 |
![]() |
更新正则表达式的属性。 |
![]() |
基于当前正则表达式的属性创建另一个正则表达式。 |
![]() |
针对提供的值测试正则表达式及其子表达式。 |
![]() |
删除该正则表达式。 |
![]() |
取消编辑正则表达式属性。 |
测试正则表达式
您可以通过在 Test expression 字段中输入一个值并点击 Test 按钮,来测试正则表达式及其子表达式。

在 Test result 列中,会显示每个子表达式的状态。
Combined result 字段显示正则表达式的整体状态。
如果定义了多个子表达式,Zabbix 会使用逻辑 AND 运算符来计算 Combined result;也就是说,如果至少有一个结果为 False,则 Combined result 也为 False。
默认全局正则表达式
默认数据集包含以下预定义的全局正则表达式:
| 名称 | 表达式 | 匹配 |
|---|---|---|
| 用于发现的文件系统 | ^(btrfs|ext2|ext3|ext4|reiser|xfs|ffs|ufs|jfs|jfs2|vxfs|hfs|apfs|refs|ntfs|fat32|zfs)$ |
"btrfs" 或 "ext2" 或 "ext3" 或 "ext4" 或 "reiser" 或 "xfs" 或 "ffs" 或 "ufs" 或 "jfs" 或 "jfs2" 或 "vxfs" 或 "hfs" 或 "apfs" 或 "refs" 或 "ntfs" 或 "fat32" 或 "zfs"。 |
| 用于发现的网络接口 | ^Software Loopback Interface |
以 "Software Loopback Interface" 开头的字符串。 |
^lo$ |
"lo"。 | |
^(In)?[Ll]oop[Bb]ack[0-9._]*$ |
可选以 "In" 开头,后跟 "L" 或 "l",再后跟 "oop",接着是 "B" 或 "b",再后跟 "ack",并且后面可选跟任意数量的数字、点或下划线的字符串。 | |
^NULL[0-9.]*$ |
以 "NULL" 开头,后面可选跟任意数量的数字或点的字符串。 | |
^[Ll]o[0-9.]*$ |
以 "Lo" 或 "lo" 开头,后面可选跟任意数量的数字或点的字符串。 | |
^[Ss]ystem$ |
"System" 或 "system"。 | |
^Nu[0-9.]*$ |
以 "Nu" 开头,后面可选跟任意数量的数字或点的字符串。 | |
| 用于 SNMP 发现的存储设备 | ^(Physical memory|Virtual memory|Memory buffers|Cached memory|Swap space)$ |
"Physical memory" 或 "Virtual memory" 或 "Memory buffers" 或 "Cached memory" 或 "Swap space"。 |
| 用于发现的 Windows 服务名称 | ^(MMCSS|gupdate|SysmonLog|clr_optimization_v2.0.50727_32|clr_optimization_v4.0.30319_32)$ |
"MMCSS" 或 "gupdate" 或 "SysmonLog" 或匹配 "clr_optimization_v2.0.50727_32" 或 "clr_optimization_v4.0.30319_32" 的字符串,其中每个点都可以替换为除换行符之外的任意字符。 |
| 用于发现的 Windows 服务启动状态 | ^(automatic|automatic delayed)$ |
"automatic" 或 "automatic delayed"。 |
导入/导出正则表达式
您可以按照 正则表达式 导出/导入配置页面中的说明,导入或导出全局正则表达式。
示例
排除精确字符串的示例
在低级别发现中使用以下表达式来发现数据库,但排除名称为特定值的数据库:
^TESTDATABASE$

Test result 和 Combined result 都显示 FALSE:名称匹配 "TESTDATABASE",因此不满足 Does not match regular expression 条件。
使用内联正则修饰符进行不区分大小写匹配的示例
使用以下正则表达式,其中包含内联修饰符 (?i),用于对字符 "error" 进行不区分大小写的匹配:
(?i)error

Test result 和 Combined result 都显示 TRUE:即使选择了 Case sensitive,字符 "error" 仍然会被匹配,因为内联修饰符 (?i) 会使匹配不区分大小写。
多个内联正则修饰符示例
使用以下正则表达式,其中包含多个内联修饰符,用于匹配特定行之后的字符:
(?<=match (?i)eveRything(?-i) after this line\r\n)(?sx).*# comment
其中:
(?i)- 启用不区分大小写匹配;(?-i)- 关闭不区分大小写匹配;(?s)- 启用 dotall 模式,允许.匹配换行符;(?x)- 启用扩展模式,允许忽略正则表达式中的空白和注释。

Test result 和 Combined result 都显示 TRUE:匹配到了特定行后面的字符。
g 修饰符不能以内联方式指定。
可用修饰符列表请参见 pcresyntax man page。
有关 PCRE 语法的更多信息,请参阅 PCRE HTML documentation。
按位置划分的正则表达式支持情况
| 位置 | 正则表达式 | 全局正则表达式 | 多行匹配 | 备注 | |
|---|---|---|---|---|---|
| Agent items | |||||
| eventlog[] | Yes | Yes | Yes | regexp、severity、source、eventid 参数 |
|
| eventlog.count[] | regexp、severity、source、eventid 参数 |
||||
| log[] | regexp 参数 |
||||
| log.count[] | |||||
| logrt[] | Yes/No | regexp 参数同时支持两者,file_regexp 参数仅支持非全局表达式 |
|||
| logrt.count[] | |||||
| proc.cpu.util[] | No | No | cmdline 参数 |
||
| proc.get[] | |||||
| proc.mem[] | |||||
| proc.num[] | |||||
| sensor[] | Linux 2.4 上的 device 和 sensor 参数 |
||||
| system.hw.macaddr[] | interface 参数 |
||||
| system.sw.packages[] | regexp 参数 |
||||
| system.sw.packages.get[] | regexp 参数 |
||||
| vfs.dir.count[] | regex_incl、regex_excl、regex_excl_dir 参数 |
||||
| vfs.dir.get[] | regex_incl、regex_excl、regex_excl_dir 参数 |
||||
| vfs.dir.size[] | regex_incl、regex_excl、regex_excl_dir 参数 |
||||
| vfs.file.regexp[] | Yes | regexp 参数 |
|||
| vfs.file.regmatch[] | |||||
| web.page.regexp[] | |||||
| SNMP traps | |||||
| snmptrap[] | Yes | Yes | No | regexp 参数 |
|
| Item value preprocessing | Yes | No | No | pattern 参数 |
|
| Functions for triggers/calculated items | |||||
| count() | Yes | Yes | Yes | 当 operator 参数为 regexp 或 iregexp 时使用 pattern 参数 |
|
| countunique() | Yes | Yes | |||
| find() | Yes | Yes | |||
| logeventid() | Yes | Yes | No | pattern 参数 |
|
| logsource() | |||||
| Low-level discovery | |||||
| Filters | Yes | Yes | No | Regular expression 字段 | |
| Overrides | Yes | No | 在 Operation 条件的 matches、does not match 选项中 | ||
| Action conditions | Yes | No | No | 在 Host name 和 Host metadata 自动注册条件的 matches、does not match 选项中 | |
| Scripts | Yes | Yes | No | Input validation rule 字段 | |
| Web monitoring | Yes | No | Yes | 带有 regex: 前缀的 Variables Required string 字段 |
|
| User macro context | Yes | No | No | 带有 regex: 前缀的宏上下文中 | |
| Macro functions | |||||
| regsub() | Yes | No | No | pattern 参数 |
|
| iregsub() | |||||
| Link indicators in maps | Yes | No | No | Pattern 字段(用于文本项) | |
| Icon mapping | Yes | Yes | No | Expression 字段 | |
| Value mapping | Yes | No | No | 如果映射类型为 regexp,则使用 Value 字段 |
|
| Agent configuration parameters | |||||
| AllowKeyRegexp | Yes | No | No | Pattern | |
| DenyKeyRegexp | |||||





