[comment]: # (tags: regular expression, regex )

[comment]: # ({4151d28b-4151d28b})
# 12 Wyrażenia regularne

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

[comment]: # ({091ac9cf-17ed5ab5})
#### Przegląd

[Perl Compatible Regular Expressions](https://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions) (PCRE, PCRE2) są obsługiwane w Zabbix.

W Zabbix istnieją dwa sposoby używania wyrażeń regularnych:

-   ręczne wprowadzanie wyrażenia regularnego
-   użycie globalnego wyrażenia regularnego utworzonego w Zabbix

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

[comment]: # ({5335a809-439895e1})
#### Wyrażenia regularne

W obsługiwanych miejscach można ręcznie wprowadzić wyrażenie regularne.
Należy pamiętać, że wyrażenie nie może zaczynać się od @, ponieważ ten symbol jest używany w Zabbix do odwoływania się do globalnych wyrażeń regularnych.

::: notewarning
Podczas używania wyrażeń regularnych może dojść do wyczerpania stosu.
Więcej informacji można znaleźć na stronie podręcznika [pcrestack](http://pcre.org/original/doc/html/pcrestack.html).
:::

Należy pamiętać, że w dopasowywaniu wielowierszowym kotwice `^` i `$` dopasowują się odpowiednio do początku/końca każdej linii, zamiast do początku/końca całego ciągu.

Zobacz także przykłady dotyczące [poprawnego escapowania](/manual/appendix/escaping) w różnych kontekstach.

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

[comment]: # ({e9ae4725-e24754dc})
#### Globalne wyrażenia regularne

W frontendzie Zabbix dostępny jest zaawansowany edytor do tworzenia i testowania złożonych wyrażeń regularnych.

Po utworzeniu wyrażenia regularnego w ten sposób można go używać w kilku miejscach w frontendzie, odwołując się do jego nazwy poprzedzonej symbolem @, na przykład *\@mycustomregexp*.

Aby utworzyć globalne wyrażenie regularne:

-   Przejdź do: *Administration > General*
-   Wybierz *Regular expressions* z listy rozwijanej
-   Kliknij *New regular expression*

Karta **Expressions** umożliwia ustawienie nazwy wyrażenia regularnego i dodanie podwyrażeń.

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

Wszystkie wymagane pola wejściowe są oznaczone czerwoną gwiazdką.

|Parameter|<|Description|
|-|----------|----------------------------------------|
|*Name*|<|Ustaw nazwę wyrażenia regularnego. Dozwolone są dowolne znaki Unicode.|
|*Expressions*|<|Kliknij *Add* w bloku Expressions, aby dodać nowe podwyrażenie.|
| |*Expression type*|Wybierz typ wyrażenia:<br>**Character string included** - dopasuj podciąg<br>**Any character string included** - dopasuj dowolny podciąg z listy rozdzielanej znakami. Lista rozdzielana obejmuje przecinek (,), kropkę (.) lub ukośnik (/).<br>**Character string not included** - dopasuj dowolny ciąg z wyjątkiem podciągu<br>**Result is TRUE** - dopasuj wyrażenie regularne<br>**Result is FALSE** - nie dopasowuj wyrażenia regularnego|
|^|*Expression*|Wprowadź podciąg/wyrażenie regularne.|
|*Delimiter*|<|Przecinek (,), kropka (.) lub ukośnik (/) służący do oddzielania ciągów tekstowych w wyrażeniu regularnym. Ten parametr jest aktywny tylko wtedy, gdy wybrano typ wyrażenia "*Any character string included*".|
|*Case sensitive*|<|Pole wyboru określające, czy wyrażenie regularne rozróżnia wielkość liter.|

Ukośnik (/) w wyrażeniu jest traktowany dosłownie, a nie jako separator.
Dzięki temu można zapisywać wyrażenia zawierające ukośnik bez błędów.

::: noteimportant
Niestandardowa nazwa wyrażenia regularnego w Zabbix może zawierać przecinki, spacje itp.
W przypadkach, gdy może to prowadzić do błędnej interpretacji podczas odwoływania się do niej (na przykład przecinek w parametrze klucza pozycja), całe odwołanie można ująć w cudzysłów, na przykład: *"\@My custom regexp for purpose1, purpose2"*.<br>
Nazw wyrażeń regularnych nie należy ujmować w cudzysłów w innych miejscach (na przykład we właściwościach reguły LLD).
:::

Na karcie **Test** można testować wyrażenie regularne i jego podwyrażenia, podając ciąg testowy.

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

Wyniki pokazują status każdego podwyrażenia oraz łączny status niestandardowego wyrażenia.

Łączny status niestandardowego wyrażenia jest definiowany jako *Combined result*.
Jeśli zdefiniowano kilka podwyrażeń, Zabbix używa operatora logicznego AND do obliczenia *Combined result*.
Oznacza to, że jeśli co najmniej jeden wynik ma wartość False, *Combined result* również ma status False.

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

[comment]: # ({5b50aa87-2ea2d961})
#### Domyślne globalne wyrażenia regularne

Zabbix zawiera kilka globalnych wyrażeń regularnych w swoim domyślnym zestawie danych.

|Name|Expression|Matches|
|--|------|------|
|*File systems for discovery*|`^(btrfs|ext2|ext3|ext4|jfs|reiser|xfs|ffs|ufs|jfs|jfs2|vxfs|hfs|refs|apfs|ntfs|fat32|zfs)$`|"btrfs" lub "ext2" lub "ext3" lub "ext4" lub "jfs" lub "reiser" lub "xfs" lub "ffs" lub "ufs" lub "jfs" lub "jfs2" lub "vxfs" lub "hfs" lub "refs" lub "apfs" lub "ntfs" lub "fat32" lub "zfs"|
|*Network interfaces for discovery*|`^Software Loopback Interface`|Łańcuchy zaczynające się od "Software Loopback Interface".|
| |`^lo$`|"lo"|
| |`^(In)?[Ll]oop[Bb]ack[0-9._]*$`|Łańcuchy, które opcjonalnie zaczynają się od "In", następnie zawierają "L" lub "l", potem "oop", następnie "B" lub "b", potem "ack", po czym opcjonalnie może wystąpić dowolna liczba cyfr, kropek lub podkreśleń.|
| |`^NULL[0-9.]*$`|Łańcuchy zaczynające się od "NULL", po których opcjonalnie może wystąpić dowolna liczba cyfr lub kropek.|
| |`^[Ll]o[0-9.]*$`|Łańcuchy zaczynające się od "Lo" lub "lo" i opcjonalnie zakończone dowolną liczbą cyfr lub kropek.|
| |`^[Ss]ystem$`|"System" lub "system"|
| |`^Nu[0-9.]*$`|Łańcuchy zaczynające się od "Nu", po których opcjonalnie może wystąpić dowolna liczba cyfr lub kropek.|
|*Storage devices for SNMP discovery*|`^(Physical memory|Virtual memory|Memory buffers|Cached memory|Swap space)$`|"Physical memory" lub "Virtual memory" lub "Memory buffers" lub "Cached memory" lub "Swap space"|
|*Windows service names for discovery*|`^(MMCSS|gupdate|SysmonLog|clr_optimization_v2.0.50727_32|clr_optimization_v4.0.30319_32)$`|"MMCSS" lub "gupdate" lub "SysmonLog" lub łańcuchy takie jak "clr\_optimization\_v2.0.50727\_32" i "clr\_optimization\_v4.0.30319\_32", gdzie zamiast kropek można wstawić dowolny znak z wyjątkiem znaku nowej linii.|
|*Windows service startup states for discovery*|`^(automatic|automatic delayed)$`|"automatic" lub "automatic delayed"|

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

[comment]: # ({4c860844-4c860844})
#### Przykłady

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

[comment]: # ({58754c14-eb858ac0})
##### Przykład 1

Użycie poniższego wyrażenia w wykrywaniu niskiego poziomu do wykrywania
baz danych z wyjątkiem bazy danych o określonej nazwie:

```default
^TESTDATABASE$
```

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

Wybrany *typ wyrażenia*: "Wynik to FALSE".
Nie pasuje do nazwy zawierającej ciąg "*TESTDATABASE*".

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

[comment]: # ({de20f95d-be96a07d})
##### Przykład z wbudowanym modyfikatorem wyrażenia regularnego

Użycie poniższego wyrażenia regularnego, w tym wbudowanego modyfikatora (?i), aby dopasować znaki "error":

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

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

Wybrany *typ wyrażenia*: "Wynik to TRUE".
Znaki "error" są dopasowane.

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

[comment]: # ({df1d15c8-489130e5})
##### Kolejny przykład z modyfikatorem regex w linii

Użycie następującego wyrażenia regularnego, w tym wielu modyfikatorów w linii, aby dopasować znaki po określonej linii:

```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)

Wybrany typ wyrażenia: "Result is TRUE".
Znaki po określonej linii są dopasowywane.

::: noteimportant
Modyfikator **g** nie może być określony w linii.
Listę dostępnych modyfikatorów można znaleźć na stronie podręcznika [pcresyntax](https://www.pcre.org/original/doc/html/pcresyntax.html#SEC16).
Więcej informacji na temat składni PCRE można znaleźć w [dokumentacji HTML PCRE](https://www.pcre.org/original/doc/html/pcrepattern.html).

:::

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

[comment]: # ({cba989e9-56f9b2c2})
#### Obsługa wyrażeń regularnych według lokalizacji

|Lokalizacja|<|Wyrażenie regularne|Globalne wyrażenie regularne|Dopasowanie wielowierszowe|Komentarze|
|-|----------|---------|---------|---------|--------------------|
|**[Pozycje agenta](/manual/config/items/itemtypes/zabbix_agent)**|<|<|<|<|<|
|<|eventlog\[\]|Yes|Yes|Yes|parametry `regexp`, `severity`, `source`, `eventid`|
|<|eventlog.count\[\]|^|^|^|parametry `regexp`, `severity`, `source`, `eventid`|
|^|log\[\]|^|^|^|parametr `regexp`|
|^|log.count\[\]|^|^|^|^|
|^|logrt\[\]|^|Yes/No|^|parametr `regexp` obsługuje oba, parametr `file_regexp` obsługuje tylko wyrażenia nieglobalne|
|^|logrt.count\[\]|^|^|^|^|
|^|proc.cpu.util\[\]|^|No|No|parametr `cmdline`|
|^|proc.get\[\]|^|^|^|^|
|^|proc.mem\[\]|^|^|^|^|
|^|proc.num\[\]|^|^|^|^|
|^|sensor\[\]|^|^|^|parametry `device` i `sensor` w systemie Linux 2.4|
|^|system.hw.macaddr\[\]|^|^|^|parametr `interface`|
|^|system.sw.packages\[\]|^|^|^|parametr `regexp`|
|^|system.sw.packages.get\[\]|^|^|^|parametr `regexp`|
|^|vfs.dir.count\[\]|^|^|^|parametry `regex_incl`, `regex_excl`, `regex_excl_dir`|
|^|vfs.dir.get\[\]|^|^|^|parametry `regex_incl`, `regex_excl`, `regex_excl_dir`|
|^|vfs.dir.size\[\]|^|^|^|parametry `regex_incl`, `regex_excl`, `regex_excl_dir`|
|^|vfs.file.regexp\[\]|^|^|Yes|parametr `regexp`|
|^|vfs.file.regmatch\[\]|^|^|^|^|
|^|web.page.regexp\[\]|^|^|^|^|
|**[Trapy SNMP](/manual/config/items/itemtypes/snmptrap)**|<|<|<|<|<|
|<|snmptrap\[\]|Yes|Yes|No|parametr `regexp`|
|**[Wstępne przetwarzanie wartości pozycji](/manual/config/items/item#item-value-preprocessing)**|<|Yes|No|No|pole `pattern`|
|**[Funkcje dla wyzwalaczy/pozycji obliczanych](/manual/appendix/functions)**|<|<|<|<|<|
|<|count()|Yes|Yes|Yes|parametr `pattern`, jeśli parametr `operator` ma wartość *regexp* lub *iregexp*|
|<|countunique()|Yes|Yes|^|^|
|<|find()|Yes|Yes|^|^|
|^|logeventid()|Yes|Yes|No|parametr `pattern`|
|^|logsource()|^|^|^|^|
|**[Wykrywanie niskiego poziomu](/manual/discovery/low_level_discovery#discovery-rule-filter)**|<|<|<|<|<|
|<|Filtry|Yes|Yes|No|pole *Regular expression*|
|^|Nadpisania|Yes|No|^|w opcjach *matches*, *does not match* dla warunków *Operation*|
|**[Warunki akcji](/manual/config/notifications/action/conditions)**|<|Yes|No|No|w opcjach *matches*, *does not match* dla warunków automatycznej rejestracji *Host name* i *Host metadata*|
|**[Skrypty](/manual/web_interface/frontend_sections/alerts/scripts)**|<|Yes|Yes|No|pole *Input validation rule*|
|**[Monitorowanie WWW](/manual/web_monitoring#configuring-a-web-scenario)**|<|Yes|No|Yes|*Variables* z prefiksem **regex:**<br>pole *Required string*|
|**[Kontekst makra użytkownika](/manual/config/macros/user_macros#user-macro-context)**|<|Yes|No|No|w kontekście makra z prefiksem **regex:**|
|**[Funkcje makr](/manual/config/macros/macro_functions)**|<|<|<|<|<|
|<|regsub()|Yes|No|No|parametr `pattern`|
|^|iregsub()|^|^|^|^|
|**[Wskaźniki łączy na mapach](/manual/config/visualization/maps/map#linking-elements)**|<|Yes|No|No|pole *Pattern* (dla pozycji tekstowych)|
|**[Mapowanie ikon](/manual/web_interface/frontend_sections/administration/general#icon-mapping)**|<|Yes|Yes|No|pole *Expression*|
|**[Mapowanie wartości](/manual/config/items/mapping#configuration)**|<|Yes|No|No|pole *Value*, jeśli typ mapowania to `regexp`|

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