[comment]: # translation:outdated

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

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

[comment]: # ({new-027d41a0})
#### Обзор

Zabbix поддерживает [Perl совместимые регулярные
выражения](https://ru.wikipedia.org/wiki/PCRE) (PCRE).

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

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

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

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

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

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

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

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

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

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

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

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

-   Перейдите в: *Администрирование → Общие*
-   Выберите *Регулярные выражения* в выпадающем списке
-   Нажмите на *Новое регулярное выражение*

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

![Пример создания регулярного
выражения](../../assets/en/manual/regular_expressions/regexp_expr.png){width="800"}

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

|Параметр|<|Описание|
|----------------|-|----------------|
|*Имя*|<|Укажите имя регулярного выражения. Разрешены любые Unicode символы.|
|*Выражения*|<|Нажмите на *Добавить* в Блоке выражений для того, чтобы добавить новое подвыражение.|
|<|*Тип выражения*|Выберите тип выражения:<br>**Строка символов включена** - совпадение по подстроке<br>**Любоая строка символов включена** - совпадение по любой из подстрок из списка с разделителями. Разделители в списке включают в себя запятую (,), точку (.) или прямую косую черту (/).<br>**Строка символов не включена** - совпадение по любой строке за исключением подстроки<br>**Результат ПРАВДА** - совпадение с регулярным выражением<br>**Результат ЛОЖЬ** - отсутствие совпадения с регулярным выражением|
|^|*Выражение*|Укажите подстроку/регулярное выражение.|
|*Разделитель*|<|Запятая (,), точка (.) или прямая косая черта (/) для разделения текстовых строк в регулярном выражении. Этот параметр доступен только когда выбран режим типа выражения "*Любоая строка символов включена*".|
|*Регистрозависимое*|<|Отметьте эту опцию чтобы указать является ли регулярное выражение чувствительным к регистру букв.|

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

::: noteimportant
В Zabbix имя пользовательского регулярного
выражения может содержать запятые, пробелы и т.п. В этих случаях, там
где имеется вероятность неверной интерпретации при использовании ссылки
(например, запятая в параметре ключа элемента данных) нужно всю ссылку
заключить в кавычки, вот таким образом: *"\@Мое выражение для цели,
цели2"*.\
В других местах (например, в свойствах LLD правил) имена регулярных
выражение нельзя заключать в кавычки.
:::

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

[comment]: # ({new-1edd4965})
#### Пример

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

    ^TESTDATABASE$

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

Выбран *Тип выражения*: "Результат ЛОЖЬ". Не соответствует имени,
содержащему строку "*TESTDATABASE*".

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

[comment]: # ({new-adfb83ec})
#### Пример с использованием inline модификатора регулярного выражения

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

    (?i)error

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

Выбран *Тип выражения*: "Релультат ПРАВДА". Символы "error" совпадают.

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

[comment]: # ({new-8f7cd280})
#### Другой пример с использованием inline модификатора регулярного выражения

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

    (?<=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)
\[en\]. Для получения более подробной информации о синтаксисе PCRE,
пожалуйста, обратитесь к [PCRE HTML
документации](https://www.pcre.org/original/doc/html/pcrepattern.html)
\[en\]. 
:::

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

[comment]: # ({new-36cb2399})
#### Более сложный пример

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

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

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

Общее состояние пользовательского выражения определяется как
*Комбинированный результат*. Если задано несколько подвыражений, для
вычисления *Комбинированного результата* Zabbix использует логический
оператор И. Такое поведение означает, если по крайней мере один
Результат является ЛОЖЬЮ, тогда *Комбинированный результат* будет также
иметь состояние Ложь.

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

[comment]: # ({new-4c3347d1})
#### Объяснение глобальных регулярных выражений

|Глобальное регулярное выражение|Выражение|Описание|
|------------------------------------------------------------|------------------|----------------|
|*File systems for discovery*|`^(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"|
|*Network interfaces for discovery*|`^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" и затем, опционально следует любое количество цифр или точек|
|*Storage devices for SNMP discovery*|`^(Physical memory\|Virtual memory\|Memory buffers\|Cached memory\|Swap space)$`|Соответствие "Physical memory" или "Virtual memory" или "Memory buffers" или "Cached memory" или "Swap space"|
|*Windows service names for discovery*|`^(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 service startup states for discovery*|`^(automatic\|automatic delayed)$`|Соответствие "automatic" или "automatic delayed".|

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

[comment]: # ({new-81f49ca8})
#### Поддержка регулярных выражений по назначению

|Назначение|<|Регулярное выражение|Глобальное регулярное выражение|Комментарии|
|--------------------|-|---------------------------------------|------------------------------------------------------------|----------------------|
|**[Элементы данных агента](/ru/manual/config/items/itemtypes/zabbix_agent)**|<|<|<|<|
|<|eventlog\[\]|Да|Да|Параметры `регулярное выражение`, `важность`, `источник`, `eventid`|
|^|log\[\]|^|^|Параметр `регулярное выражение`|
|^|log.count\[\]|^|^|^|
|^|logrt\[\]|^|Да/Нет|Параметр `регулярное выражение` поддерживает оба варианта, параметр `регулярное_выражение_файла` поддерживает только не глобальные выражения|
|^|logrt.count\[\]|^|^|^|
|^|proc.cpu.util\[\]|^|Нет|Параметр `cmdline`|
|^|proc.mem\[\]|^|^|^|
|^|proc.num\[\]|^|^|^|
|^|sensor\[\]|^|^|Параметры `устройство` и `датчик` в Linux 2.4|
|^|system.hw.macaddr\[\]|^|^|Параметр `интерфейс`|
|^|system.sw.packages\[\]|^|^|Параметр `пакет`|
|^|vfs.dir.count\[\]|^|^|Параметры `regex_вкл` и `regex_искл`|
|^|vfs.dir.size\[\]|^|^|Параметры `regex_вкл` и `regex_искл`|
|^|vfs.file.regexp\[\]|^|^|Параметр `регулярное выражение`|
|^|vfs.file.regmatch\[\]|^|^|^|
|^|web.page.regexp\[\]|^|^|^|
|**[SNMP трапы](/ru/manual/config/items/itemtypes/snmptrap)**|<|<|<|<|
|<|snmptrap\[\]|Да|Да|Пареметр `regexp`|
|**[Предобработка значений элементов данных](/ru/manual/config/items/item#предобработка_значений_элемента_данных)**|<|Да|Нет|Параметр `шаблон`|
|**[Функции триггеров](/ru/manual/appendix/triggers/functions)**|<|<|<|<|
|<|count()|Да|Да|Параметр `шаблон`, если параметр `оператор` равен *regexp* или *iregexp*|
|^|logeventid()|^|^|Параметр `шаблон`|
|^|logsource()|^|^|^|
|^|iregexp()|^|^|^|
|^|regexp()|^|^|^|
|**[Низкоуровневое обнаружение](/ru/manual/discovery/low_level_discovery#фильтр_правила_обнаружения)**|<|Да|Да|Поле *Фильтр*|
|**[Веб-мониторинг](/ru/manual/web_monitoring#настройка_сценария)**|<|Да|Нет|*Переменные* с префиком **regex:**<br>Поле *Требуемая строка*|
|**[Функции макросов](/ru/manual/config/macros/macro_functions)**|<|<|<|<|
|<|regsub()|Да|Нет|Параметр `шаблон`|
|^|iregsub()|^|^|^|
|**[Соответствие иконок](/ru/manual/web_interface/frontend_sections/administration/general#соответствия_иконок)**|<|Да|Да|Поле *Выражение*|

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