[comment]: # ({4151d28b-4151d28b})
# 12 Espressioni regolari

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

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

[Perl Compatible Regular Expressions](https://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions) (PCRE, PCRE2) sono supportate in Zabbix.

Esistono due modi per usare le espressioni regolari in Zabbix:

-   inserire manualmente un'espressione regolare
-   usare un'espressione regolare globale creata in Zabbix

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

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

È possibile inserire manualmente un'espressione regolare nei punti supportati.
Si noti che l'espressione non può iniziare con @ perché tale simbolo viene usato in Zabbix per fare riferimento alle espressioni regolari globali.

::: notewarning
È possibile esaurire lo stack quando si usano espressioni regolari.
Per ulteriori informazioni, vedere la pagina man [pcrestack](http://pcre.org/original/doc/html/pcrestack.html).
:::

Si noti che, nella corrispondenza multilinea, gli ancoraggi `^` e `$` corrispondono rispettivamente all'inizio/fine di ogni riga, invece che all'inizio/fine dell'intera stringa.

Vedere anche gli esempi di [escaping corretto](/manual/appendix/escaping) in vari contesti.

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

[comment]: # ({e9ae4725-e24754dc})
#### Espressioni regolari globali

Esiste un editor avanzato per creare e testare espressioni regolari complesse nel frontend di Zabbix.

Una volta creata in questo modo un'espressione regolare, può essere utilizzata in diversi punti del frontend facendo riferimento al suo nome, preceduto da @, ad esempio, *\@mycustomregexp*.

Per creare un'espressione regolare globale:

-   Vai a: *Administration > General*
-   Seleziona *Regular expressions* dal menu a discesa
-   Fai clic su *New regular expression*

La scheda **Expressions** consente di impostare il nome dell'espressione regolare e aggiungere sottoespressioni.

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

Tutti i campi obbligatori sono contrassegnati da un asterisco rosso.

|Parameter|<|Description|
|-|----------|----------------------------------------|
|*Name*|<|Imposta il nome dell'espressione regolare. Sono consentiti tutti i caratteri Unicode.|
|*Expressions*|<|Fai clic su *Add* nel blocco Expressions per aggiungere una nuova sottoespressione.|
| |*Expression type*|Seleziona il tipo di espressione:<br>**Character string included** - corrisponde alla sottostringa<br>**Any character string included** - corrisponde a qualsiasi sottostringa da un elenco delimitato. L'elenco delimitato include una virgola (,), un punto (.) o una barra obliqua (/).<br>**Character string not included** - corrisponde a qualsiasi stringa tranne la sottostringa<br>**Result is TRUE** - corrisponde all'espressione regolare<br>**Result is FALSE** - non corrisponde all'espressione regolare|
|^|*Expression*|Inserisci la sottostringa/espressione regolare.|
|*Delimiter*|<|Una virgola (,), un punto (.) o una barra obliqua (/) per separare le stringhe di testo in un'espressione regolare. Questo parametro è attivo solo quando è selezionato il tipo di espressione "*Any character string included*".|
|*Case sensitive*|<|Una casella di controllo per specificare se un'espressione regolare distingue tra maiuscole e minuscole.|

Una barra obliqua (/) nell'espressione viene interpretata letteralmente, anziché come delimitatore.
In questo modo è possibile salvare espressioni contenenti una barra obliqua, senza errori.

::: noteimportant
Un nome personalizzato di espressione regolare in Zabbix può contenere virgole, spazi, ecc.
Nei casi in cui ciò possa portare a un'interpretazione errata durante il riferimento (ad esempio, una virgola nel parametro di una chiave item) l'intero riferimento può essere racchiuso tra virgolette in questo modo: *"\@My custom regexp for purpose1, purpose2"*.<br>
I nomi delle espressioni regolari non devono essere racchiusi tra virgolette in altre posizioni (ad esempio, nelle proprietà di una regola LLD).
:::

Nella scheda **Test** l'espressione regolare e le sue sottoespressioni possono essere testate fornendo una stringa di test.

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

I risultati mostrano lo stato di ciascuna sottoespressione e lo stato complessivo dell'espressione personalizzata.

Lo stato complessivo dell'espressione personalizzata è definito come *Combined result*.
Se sono definite più sottoespressioni, Zabbix utilizza l'operatore logico AND per calcolare *Combined result*.
Ciò significa che, se almeno un Result è False, anche *Combined result* avrà stato False.

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

[comment]: # ({5b50aa87-2ea2d961})
#### Espressioni regolari globali predefinite

Zabbix include diverse espressioni regolari globali nel proprio set di dati predefinito.

|Nome|Espressione|Corrispondenze|
|--|------|------|
|*File systems for discovery*|`^(btrfs|ext2|ext3|ext4|jfs|reiser|xfs|ffs|ufs|jfs|jfs2|vxfs|hfs|refs|apfs|ntfs|fat32|zfs)$`|"btrfs" o "ext2" o "ext3" o "ext4" o "jfs" o "reiser" o "xfs" o "ffs" o "ufs" o "jfs" o "jfs2" o "vxfs" o "hfs" o "refs" o "apfs" o "ntfs" o "fat32" o "zfs"|
|*Network interfaces for discovery*|`^Software Loopback Interface`|Stringhe che iniziano con "Software Loopback Interface".|
| |`^lo$`|"lo"|
| |`^(In)?[Ll]oop[Bb]ack[0-9._]*$`|Stringhe che iniziano facoltativamente con "In", poi hanno "L" o "l", quindi "oop", poi "B" o "b", quindi "ack", seguite facoltativamente da un numero qualsiasi di cifre, punti o underscore.|
| |`^NULL[0-9.]*$`|Stringhe che iniziano con "NULL" seguite facoltativamente da un numero qualsiasi di cifre o punti.|
| |`^[Ll]o[0-9.]*$`|Stringhe che iniziano con "Lo" o "lo" e sono seguite facoltativamente da un numero qualsiasi di cifre o punti.|
| |`^[Ss]ystem$`|"System" o "system"|
| |`^Nu[0-9.]*$`|Stringhe che iniziano con "Nu" seguite facoltativamente da un numero qualsiasi di cifre o punti.|
|*Storage devices for SNMP discovery*|`^(Physical memory|Virtual memory|Memory buffers|Cached memory|Swap space)$`|"Physical memory" o "Virtual memory" o "Memory buffers" o "Cached memory" o "Swap space"|
|*Windows service names for discovery*|`^(MMCSS|gupdate|SysmonLog|clr_optimization_v2.0.50727_32|clr_optimization_v4.0.30319_32)$`|"MMCSS" o "gupdate" o "SysmonLog" o stringhe come "clr\_optimization\_v2.0.50727\_32" e "clr\_optimization\_v4.0.30319\_32" in cui, al posto dei punti, puoi inserire qualsiasi carattere tranne il ritorno a capo.|
|*Windows service startup states for discovery*|`^(automatic|automatic delayed)$`|"automatic" o "automatic delayed"|

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

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

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

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

Uso della seguente espressione nella discovery a basso livello per individuare
database, ad eccezione di un database con un nome specifico:

```default
^TESTDATABASE$
```

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

*Tipo di espressione* scelto: "Il risultato è FALSE".
Non corrisponde al nome, contenente la stringa "*TESTDATABASE*".

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

[comment]: # ({de20f95d-be96a07d})
##### Esempio con un modificatore regex inline

Uso della seguente espressione regolare, incluso un modificatore inline (?i), per corrispondere ai caratteri "error":

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

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

*Tipo di espressione* scelto: "Il risultato è TRUE".
I caratteri "error" corrispondono.

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

[comment]: # ({df1d15c8-489130e5})
##### Un altro esempio con un modificatore regex inline

Uso della seguente espressione regolare, che include più modificatori inline, per corrispondere ai caratteri dopo una riga specifica:

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

Tipo di espressione scelto: "Result is TRUE".
I caratteri dopo una riga specifica vengono corrisposti.

::: noteimportant
Il modificatore **g** non può essere specificato in linea.
L'elenco dei modificatori disponibili è disponibile nella [pagina man pcresyntax](https://www.pcre.org/original/doc/html/pcresyntax.html#SEC16).
Per ulteriori informazioni sulla sintassi PCRE, fare riferimento alla [documentazione HTML PCRE](https://www.pcre.org/original/doc/html/pcrepattern.html).

:::

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

[comment]: # ({cba989e9-56f9b2c2})
#### Supporto delle espressioni regolari per posizione

|Posizione|<|Espressione regolare|Espressione regolare globale|Corrispondenza multilinea|Commenti|
|-|----------|---------|---------|---------|--------------------|
|**[Item agent](/manual/config/items/itemtypes/zabbix_agent)**|<|<|<|<|<|
|<|eventlog\[\]|Yes|Yes|Yes|parametri `regexp`, `severity`, `source`, `eventid`|
|<|eventlog.count\[\]|^|^|^|parametri `regexp`, `severity`, `source`, `eventid`|
|^|log\[\]|^|^|^|parametro `regexp`|
|^|log.count\[\]|^|^|^|^|
|^|logrt\[\]|^|Yes/No|^|il parametro `regexp` supporta entrambi, il parametro `file_regexp` supporta solo espressioni non globali|
|^|logrt.count\[\]|^|^|^|^
|^|proc.cpu.util\[\]|^|No|No|parametro `cmdline`|
|^|proc.get\[\]|^|^|^|^|
|^|proc.mem\[\]|^|^|^|^|
|^|proc.num\[\]|^|^|^|^|
|^|sensor\[\]|^|^|^|parametri `device` e `sensor` su Linux 2.4|
|^|system.hw.macaddr\[\]|^|^|^|parametro `interface`|
|^|system.sw.packages\[\]|^|^|^|parametro `regexp`|
|^|system.sw.packages.get\[\]|^|^|^|parametro `regexp`|
|^|vfs.dir.count\[\]|^|^|^|parametri `regex_incl`, `regex_excl`, `regex_excl_dir`|
|^|vfs.dir.get\[\]|^|^|^|parametri `regex_incl`, `regex_excl`, `regex_excl_dir`|
|^|vfs.dir.size\[\]|^|^|^|parametri `regex_incl`, `regex_excl`, `regex_excl_dir`|
|^|vfs.file.regexp\[\]|^|^|Yes|parametro `regexp`|
|^|vfs.file.regmatch\[\]|^|^|^|^|
|^|web.page.regexp\[\]|^|^|^|^|
|**[SNMP traps](/manual/config/items/itemtypes/snmptrap)**|<|<|<|<|<|
|<|snmptrap\[\]|Yes|Yes|No|parametro `regexp`|
|**[Preprocessing del valore dell'item](/manual/config/items/item#item-value-preprocessing)**|<|Yes|No|No|parametro `pattern`|
|**[Funzioni per trigger/item calcolati](/manual/appendix/functions)**|<|<|<|<|<|
|<|count()|Yes|Yes|Yes|parametro `pattern` se il parametro `operator` è *regexp* o *iregexp*|
|<|countunique()|Yes|Yes|^|^|
|<|find()|Yes|Yes|^|^|
|^|logeventid()|Yes|Yes|No|parametro `pattern`|
|^|logsource()|^|^|^|^|
|**[Low-level discovery](/manual/discovery/low_level_discovery#discovery-rule-filter)**|<|<|<|<|<|
|<|Filters|Yes|Yes|No|campo *Regular expression*|
|^|Overrides|Yes|No|^|nelle opzioni *matches*, *does not match* per le condizioni *Operation*|
|**[Action conditions](/manual/config/notifications/action/conditions)**|<|Yes|No|No|nelle opzioni *matches*, *does not match* per le condizioni di autoregistrazione *Host name* e *Host metadata*|
|**[Scripts](/manual/web_interface/frontend_sections/alerts/scripts)**|<|Yes|Yes|No|campo *Input validation rule*|
|**[Web monitoring](/manual/web_monitoring#configuring-a-web-scenario)**|<|Yes|No|Yes|*Variables* con prefisso **regex:**<br>campo *Required string*|
|**[Contesto macro utente](/manual/config/macros/user_macros#user-macro-context)**|<|Yes|No|No|nel contesto macro con prefisso **regex:**|
|**[Macro functions](/manual/config/macros/macro_functions)**|<|<|<|<|<|
|<|regsub()|Yes|No|No|parametro `pattern`|
|^|iregsub()|^|^|^|^|
|**[Indicatori di collegamento nelle mappe](/manual/config/visualization/maps/map#linking-elements)**|<|Yes|No|No|campo *Pattern* (per gli item di testo)|
|**[Mappatura icone](/manual/web_interface/frontend_sections/administration/general#icon-mapping)**|<|Yes|Yes|No|campo *Expression*|
|**[Mappatura valori](/manual/config/items/mapping#configuration)**|<|Yes|No|No|campo *Value* se il tipo di mapping è `regexp`|

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