[comment]: # translation:outdated

[comment]: # ({af1977d4-4151d28b})
# 12. 正则表达式

[comment]: # ({/af1977d4-4151d28b})

[comment]: # ({41e056af-027d41a0})
#### 概述

Zabbix支持
[Perl兼容的正规表达式库](https://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions)
(PCRE)。

在Zabbix中有两种使用正则表达式的方法：

-   手动输入正则表达式
-   使用在Zabbix中创建的全局正则表达式

[comment]: # ({/41e056af-027d41a0})

[comment]: # ({8c1e832f-439895e1})
#### 正则表达式

你可以在支持的位置手动输入正则表达式。请注意，表达式可能不以\@开头，因为该符号在Zabbix中用于引用全局正则表达式。

[comment]: # ({/8c1e832f-439895e1})

[comment]: # ({b4e30e8b-56a0ae56})
#### 全局正则表达式

在Zabbix前端，有一个高级的编辑器用于创建和测试复杂的正则表达式。

一旦以这种方式创建了正则表达式，它就可以在前端的几个地方使用，方法是加个\@前缀来引用它的名称，
例如，*\@mycustomregexp*。

创建全局正则表达式：

-   点击： *管理 → 通用*
-   从右上角的下拉列表中选择 *正则表达式*
-   单击 *新的正则表达式*

**正则表达式**选项卡允许设置正则表达式名称并添加子表达式。

![](../../assets/en/manual/regular_expressions/regexp_expr.png){width="600"}

所有必填输入字段都标有红色星号。

|参数|说|<|
|------|---|-|
|*名称*|设|正则表达式名称。允许使用任何Unicode字符。|
|*表达式*|单击|达式块中的 *添加* 用来添加新的子表达式。|
|<|*表达式类型*   选择表达|类型：<br>**字符串已包含** - 匹配子字符串<br>**包括任何字符串** - 匹配分隔列表中的任何子字符串。分隔列表包括逗号（,）、点号（.）或正斜杠（/）。<br>**字符串未包含** - 匹配除此以外的任何子字符串<br>**结果为真** - 匹配正则表达式<br>**结果为假** - 不匹配正则表达式|
|<|*表达式*       输入|字符串/正则表达式。|
|*分隔符*|用逗|（,）、点号（.）或正斜杠（/）分隔正则表达式中的文本字符串。仅当选择“*包括任何字符串*”表达式类型时，此参数才有效。|
|*区分大小写*|此复选框|于指定正则表达式是否对字母大小写敏感。|

自Zabbix
2.4.0开始，表达式中的正斜杠（/）按字面意思处理，而不是分隔符。这样就可以保存包含斜杠的表达式，而以前版本则会报错。

<note
important>Zabbix里自定义的表达式名称可以包含逗号，空格等。在引用时可能导致误解的情况下（例如，监控项键值的参数中的逗号），整个引用可以放在引号中，如下所示：//
" \@My custom regexp for purpose1, purpose2"//。\
不能在其他位置引用正则表达式名称（例如，在低级自动发现规则属性中）。
:::

[comment]: # ({/b4e30e8b-56a0ae56})

[comment]: # ({4dbef16a-1edd4965})
#### 举例

在低级自动发现中使用以下正则表达式，来发现不考虑具有特定名称的数据库：

    ^TESTDATABASE$

![regexp\_expr\_2.png](../../assets/en/manual/regular_expressions/regexp_expr_2.png)

选择 *表达式类型*： "结果为假"。不匹配名称，包含字符串“*TESTDATABASE*”。

[comment]: # ({/4dbef16a-1edd4965})

[comment]: # ({fb057c6b-adfb83ec})
#### 内联正则表达式修饰符的示例

使用如下带有内联修饰符（?i）的正则表达式匹配“error”字符：

    (?i)error

![regexp\_expr\_3a.png](../../assets/en/manual/regular_expressions/regexp_expr_3a.png)

选择 *表达式类型*： "结果为真"。“error”字符被匹配到。

[comment]: # ({/fb057c6b-adfb83ec})

[comment]: # ({96f26817-8f7cd280})
#### 内联正则表达式修饰符的另一个示例

使用如下带有内联修饰符（?i）的正则表达式匹配“error”字符：

    (?<=match (?i)everything(?-i) after this line\n)(?sx).*    #我们增加了一个修饰符(?s)使得点号（.）可以匹配换行符

![regexp\_expr\_4\_new.png](../../assets/en/manual/regular_expressions/regexp_expr_4_new.png)

选择表达式类型： "结果为真"。匹配特定行后的字符。

::: noteimportant
 **g**修饰符不能在行中指定。可用的修饰符列表可以在
[pcresyntax手册](https://www.pcre.org/original/doc/html/pcresyntax.html#SEC16)
里找到。如果想了解更多的PCRE正则表达式语法，请参考 [PCRE
HTML文档](https://www.pcre.org/original/doc/html/pcrepattern.html)。

:::

[comment]: # ({/96f26817-8f7cd280})

[comment]: # ({b02bf1c6-36cb2399})
#### 更复杂的例子

自定义正则表达式可能包含多个子表达式，可以通过提供测试字符串在**Test**选项卡中进行测试。

![](../../assets/en/manual/regular_expressions/regexp_test.png){width="600"}

结果显示每个子表达式的状态和整个自定义表达式的状态。

整个自定义表达式状态定义为
*合并结果*。如果定义了几个子表达式，Zabbix使用与逻辑运算符来计算
*合并结果*。这意味着如果只要有一个结果为False，*合并结果*
也为False状态。

[comment]: # ({/b02bf1c6-36cb2399})

[comment]: # ({d1b9e453-4c3347d1})
#### 全局正则表达式的说明

|全局正则表达式              表达式|说明|<|
|--------------------------------------------|------|-|
|*文件系统发现*              `^(bt|fs\|ext2\|ext3\|ext4\|jfs\|reiser\|xfs\|ffs\|ufs\|jfs\|jfs2\|vxfs\|hfs\|refs\|ntfs\|fat32\|zfs)$`       匹配btr|s”或“ext2”或“ext3”或“ext4”或“jfs”或“reiser”或“xfs”或“ffs”或“ufs”或“jfs”或“jfs2”或“vxfs”或“hfs“或”refs“或”ntfs“或”fat32“或”zfs“|
|*网络接口发现*              `^Sof|ware Loopback Interface`                                                                匹配以"S|ftware Loopback Interface"开头的字符串|
|<|`^lo$`|匹配"lo"|
|<|`^(In)?[Ll]oop[Bb]ack[0-9._]*$`|匹配以 “In” 开头（该项可选），然后是“L”或者“l”字符，然后是“oop”，然后是“B”或者“b”，然后是“ack”，最后以任意长度（长度可能为0）的数字（0-9），点号（.）或者下划线（\_）结尾的字符串|
|<|`^NULL[0-9.]*$`|匹配以“NULL”开头的字符串，后面是任意长度（长度可能为0）的数字（0-9）或者点号（.）|
|<|`^[Ll]o[0-9.]*$`|匹配以“Lo”或者“lo”开头的字符串，后面是任意长度（长度可能为0）的数字（0-9）或者点号（.）|
|<|`^[Ss]ystem$`|匹配“System”或者“system”|
|<|`^Nu[0-9.]*$`|匹配以 “Nu” 开头的字符串，后面是任意长度（长度可能为0）的数字（0-9）或者点号（.）|
|*存储设备SNMP发现*          `^(Ph|sical memory\|Virtual memory\|Memory buffers\|Cached memory\|Swap space)$`                  匹配"Ph|sical memory"或"Virtual memory"或"Memory buffers"或"Cached memory"或"Swap space"|
|*Windows服务名称发现*       `^(MM|SS\|gupdate\|SysmonLog\|clr_optimization_v2.0.50727_32\|clr_optimization_v4.0.30319_32)$`   匹配“MM|SS”或“gupdate”或“SysmonLog”或类似“clr\_optimization\_v2.0.50727\_32”和“clr\_optimization\_v4.0.30319\_32”的字符串，而不是点号，可以放置除换行符之外的任何字符。|
|*Windows服务启动状态发现*   `^(auto|atic\|automatic delayed)$`                                                             匹配"auto|atic"或"automatic delayed"。|

[comment]: # ({/d1b9e453-4c3347d1})

[comment]: # ({d82efad5-81f49ca8})
#### 支持正则表达式的位置

|位置|正|表达式   全局正则表达|注释|<|
|------|---|------------------------------|------|-|
|**[Agent监控项](/manual/config/items/itemtypes/zabbix_agent)**|<|<|<|<|
|<|eventlog\[\]|支持         支|`re|exp`, `severity`, `source`, `eventid` 参数|
|^|log\[\]|^|^|`regexp` 参数|
|^|log.count\[\]|^|^|^|
|^|logrt\[\]|^|支持/不支持      `reg|xp` 参数两者都支持, `file_regexp` 参数仅支持非全局表达式|
|^|logrt.count\[\]|^|^|^|
|^|proc.cpu.util\[\]|^|不支持           `c|dline` 参数|
|^|proc.mem\[\]|^|^|^|
|^|proc.num\[\]|^|^|^|
|^|sensor\[\]|^|^|`device` 和 `sensor` 参数在Linux 2.4中|
|^|system.hw.macaddr\[\]|^|^|`interface` 参数|
|^|system.sw.packages\[\]|^|^|`package` 参数|
|^|vfs.dir.count\[\]|^|^|`regex_incl` 和 `regex_excl` 参数|
|^|vfs.dir.size\[\]|^|^|`regex_incl` 和 `regex_excl` 参数|
|^|vfs.file.regexp\[\]|^|^|`regexp` 参数|
|^|vfs.file.regmatch\[\]|^|^|^|
|^|web.page.regexp\[\]|^|^|^|
|**[SNMP捕捉器](/manual/config/items/itemtypes/snmptrap)**|<|<|<|<|
|<|snmptrap\[\]|支持         支|`re|exp` 参数|
|**[监控项值预处理](/manual/config/items/item#item_value_preprocessing)**|支持|不支持|`pattern` 参|<|
|**[触发器函数](/manual/appendix/triggers/functions)**|<|<|<|<|
|<|count()|支持         支|`pa|tern` 参数，如果 `operator` 参数是 *regexp* 或者 *iregexp*|
|^|logeventid()|^|^|`pattern` 参数|
|^|iregexp()|^|^|^|
|^|regexp()|^|^|^|
|**[低级别发现](/manual/discovery/low_level_discovery#discovery_rule_filter)**|支持|支持|*过滤* 字段|<|
|**[Web监测](/manual/web_monitoring#configuring_a_web_scenario)**|支|不支持|*Varia|les* 带有 **regex:** 前缀<br>*变量所需字符串* 字段|
|**[宏函数](/manual/config/macros/macro_functions)**|<|<|<|<|
|<|regsub()|支持         不|持           `pat|ern` 参数|
|^|iregsub()|^|^|^|
|**[图标映射](/manual/web_interface/frontend_sections/administration/general#icon_mapping)**|支持|支持|*表达式* 字|<|

[comment]: # ({/d82efad5-81f49ca8})
