[comment]: # ({4151d28b-4151d28b})
# 12. Регулярные выражения

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

[comment]: # ({091ac9cf-17ed5ab5})
#### Обзор

[Perl Compatible Regular Expressions](https://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions) (PCRE, PCRE2) поддерживаются в Zabbix.

В Zabbix есть два способа использования регулярных выражений:

-   вручную ввести регулярное выражение
-   использовать глобальное регулярное выражение, созданное в Zabbix

[comment]: # ({/091ac9cf-17ed5ab5})

[comment]: # ({5335a809-439895e1})
#### Регулярные выражения

Вы можете вручную ввести регулярное выражение в поддерживаемых местах.
Обратите внимание, что выражение не может начинаться с @, поскольку этот символ используется в Zabbix для ссылки на глобальные регулярные выражения.

::: notewarning
При использовании регулярных выражений возможен переполнение стека.
См. страницу руководства [pcrestack](http://pcre.org/original/doc/html/pcrestack.html) для получения дополнительной информации.
:::

Обратите внимание, что при сопоставлении в несколько строк якоря `^` и `$` соответствуют началу/концу каждой строки соответственно, а не началу/концу всей строки.

См. также примеры [правильного экранирования](/manual/appendix/escaping) в различных контекстах.

[comment]: # ({/5335a809-439895e1})

[comment]: # ({e9ae4725-e24754dc})
#### Глобальные регулярные выражения

В веб-интерфейсе Zabbix есть расширенный редактор для создания и тестирования сложных регулярных выражений.

После того как регулярное выражение создано таким образом, его можно использовать в нескольких местах веб-интерфейса, обращаясь к нему по имени с префиксом @, например, *\@mycustomregexp*.

Чтобы создать глобальное регулярное выражение:

-   Перейдите в: *Administration > General*
-   Выберите *Regular expressions* в выпадающем списке
-   Нажмите *New regular expression*

Вкладка **Expressions** позволяет задать имя регулярного выражения и добавить подвыражения.

![](../../assets/en/manual/regular_expressions/global_regexp.png)

Все обязательные поля ввода отмечены красной звездочкой.

|Parameter|<|Description|
|-|----------|----------------------------------------|
|*Name*|<|Задайте имя регулярного выражения. Допускаются любые символы Unicode.|
|*Expressions*|<|Нажмите *Add* в блоке Expressions, чтобы добавить новое подвыражение.|
| |*Expression type*|Выберите тип выражения:<br>**Character string included** - совпадение с подстрокой<br>**Any character string included** - совпадение с любой подстрокой из списка, разделенного разделителем. В качестве разделителя используются запятая (,), точка (.) или косая черта (/).<br>**Character string not included** - совпадение с любой строкой, кроме подстроки<br>**Result is TRUE** - совпадение с регулярным выражением<br>**Result is FALSE** - не совпадать с регулярным выражением|
|^|*Expression*|Введите подстроку/регулярное выражение.|
|*Delimiter*|<|Запятая (,), точка (.) или косая черта (/) для разделения текстовых строк в регулярном выражении. Этот параметр активен только при выборе типа выражения "*Any character string included*".|
|*Case sensitive*|<|Флажок, указывающий, чувствительно ли регулярное выражение к регистру букв.|

Косая черта (/) в выражении воспринимается буквально, а не как разделитель.
Таким образом можно сохранять выражения, содержащие косую черту, без ошибок.

::: noteimportant
Пользовательское имя регулярного выражения в Zabbix может содержать запятые, пробелы и т. д.
В тех случаях, когда это может привести к неверной интерпретации при ссылке на него (например, запятая в параметре ключа элемента данных), всю ссылку можно заключить в кавычки, например: *"\@My custom regexp for purpose1, purpose2"*.<br>
В других местах имена регулярных выражений не должны заключаться в кавычки (например, в свойствах правила LLD).
:::

На вкладке **Test** регулярное выражение и его подвыражения можно проверить, указав тестовую строку.

![](../../assets/en/manual/regular_expressions/global_regexp_b.png)

Результаты показывают состояние каждого подвыражения и общее состояние пользовательского выражения.

Общее состояние пользовательского выражения определяется как *Combined result*.
Если определено несколько подвыражений, Zabbix использует логический оператор AND для вычисления *Combined result*.
Это означает, что если хотя бы одно значение Result имеет False, то *Combined result* также имеет статус False.

[comment]: # ({/e9ae4725-e24754dc})

[comment]: # ({5b50aa87-2ea2d961})
#### Регулярные выражения по умолчанию для глобальных правил

Zabbix поставляется с несколькими глобальными регулярными выражениями в наборе данных по умолчанию.

|Name|Expression|Matches|
|--|------|------|
|*Файловые системы для обнаружения*|`^(btrfs|ext2|ext3|ext4|jfs|reiser|xfs|ffs|ufs|jfs|jfs2|vxfs|hfs|refs|apfs|ntfs|fat32|zfs)$`|"btrfs" или "ext2" или "ext3" или "ext4" или "jfs" или "reiser" или "xfs" или "ffs" или "ufs" или "jfs" или "jfs2" или "vxfs" или "hfs" или "refs" или "apfs" или "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"|

[comment]: # ({/5b50aa87-2ea2d961})

[comment]: # ({4c860844-4c860844})
#### Примеры

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

[comment]: # ({58754c14-eb858ac0})
##### Пример 1

Использование следующего выражения в низкоуровневом обнаружении для обнаружения
баз данных, кроме базы данных с определенным именем:

```default
^TESTDATABASE$
```

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

Выбранный *тип выражения*: "Результат — FALSE".
Не соответствует имени, содержащему строку "*TESTDATABASE*".

[comment]: # ({/58754c14-eb858ac0})

[comment]: # ({de20f95d-be96a07d})
##### Пример с модификатором регулярного выражения в строке

Использование следующего регулярного выражения, включая встроенный модификатор (?i), для сопоставления символов "error":

```default
(?i)error
```

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

Выбранный *тип выражения*: "Результат — TRUE".
Символы "error" сопоставляются.

[comment]: # ({/de20f95d-be96a07d})

[comment]: # ({df1d15c8-489130e5})
##### Еще один пример с модификатором регулярного выражения в строке

Использование следующего регулярного выражения, включая несколько встроенных модификаторов, для сопоставления символов после определенной строки:

```default
(?<=match (?i)everything(?-i) after this line\n)(?sx).*# we add s modifier to allow . match newline characters
```

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

Выбранный тип выражения: "Result is TRUE".
Символы после определенной строки сопоставляются.

::: noteimportant
Модификатор **g** нельзя указать в строке.
Список доступных модификаторов можно найти на странице man [pcresyntax](https://www.pcre.org/original/doc/html/pcresyntax.html#SEC16).
Дополнительные сведения о синтаксисе PCRE см. в [HTML-документации PCRE](https://www.pcre.org/original/doc/html/pcrepattern.html).

:::

[comment]: # ({/df1d15c8-489130e5})

[comment]: # ({cba989e9-56f9b2c2})
#### Поддержка регулярных выражений по расположению

|Расположение|<|Регулярное выражение|Глобальное регулярное выражение|Многострочное сопоставление|Комментарии|
|-|----------|---------|---------|---------|--------------------|
|**[Элементы данных агента](/manual/config/items/itemtypes/zabbix_agent)**|<|<|<|<|<|
|<|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\[\]|^|^|^|параметры `device` и `sensor` в Linux 2.4|
|^|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](/manual/config/items/itemtypes/snmptrap)**|<|<|<|<|<|
|<|snmptrap\[\]|Yes|Yes|No|параметр `regexp`|
|**[Предварительная обработка значения элемента данных](/manual/config/items/item#item-value-preprocessing)**|<|Yes|No|No|параметр `pattern`|
|**[Функции для триггеров/вычисляемых элементов данных](/manual/appendix/functions)**|<|<|<|<|<|
|<|count()|Yes|Yes|Yes|параметр `pattern`, если параметр `operator` имеет значение *regexp* или *iregexp*|
|<|countunique()|Yes|Yes|^|^|
|<|find()|Yes|Yes|^|^|
|^|logeventid()|Yes|Yes|No|параметр `pattern`|
|^|logsource()|^|^|^|^|
|**[Низкоуровневое обнаружение](/manual/discovery/low_level_discovery#discovery-rule-filter)**|<|<|<|<|<|
|<|Filters|Yes|Yes|No|поле *Regular expression*|
|^|Overrides|Yes|No|^|в условиях *matches*, *does not match* для *Operation*|
|**[Условия действий](/manual/config/notifications/action/conditions)**|<|Yes|No|No|в условиях автосоздания *matches*, *does not match* для *Host name* и *Host metadata*|
|**[Скрипты](/manual/web_interface/frontend_sections/alerts/scripts)**|<|Yes|Yes|No|поле *Input validation rule*|
|**[Веб-мониторинг](/manual/web_monitoring#configuring-a-web-scenario)**|<|Yes|No|Yes|*Variables* с префиксом **regex:**<br>поле *Required string*|
|**[Контекст пользовательского макроса](/manual/config/macros/user_macros#user-macro-context)**|<|Yes|No|No|в контексте макроса с префиксом **regex:**|
|**[Функции макросов](/manual/config/macros/macro_functions)**|<|<|<|<|<|
|<|regsub()|Yes|No|No|параметр `pattern`|
|^|iregsub()|^|^|^|^|
|**[Индикаторы ссылок на картах](/manual/config/visualization/maps/map#linking-elements)**|<|Yes|No|No|поле *Pattern* (для текстовых элементов данных)|
|**[Сопоставление значков](/manual/web_interface/frontend_sections/administration/general#icon-mapping)**|<|Yes|Yes|No|поле *Expression*|
|**[Сопоставление значений](/manual/config/items/mapping#configuration)**|<|Yes|No|No|поле *Value*, если тип сопоставления — `regexp`|

[comment]: # ({/cba989e9-56f9b2c2})
