Visualizzazioni:

Le espressioni regolari vengono utilizzate per effettuare la ricerca di stringhe. Consultare le seguenti tabelle per alcuni esempi di espressioni regolari. Per specificare un'espressione regolare, aggiungere un operatore ".REG." prima del modello.

In Internet, sono disponibili diversi siti Web ed esercitazioni online. Uno di questi siti è PerlDoc, all'indirizzo:

http://www.perl.com/doc/manual/html/pod/perlre.html

Avvertenza:

Le espressioni regolari sono un potente strumento di ricerca delle stringhe. Per questo motivo, Trend Micro consiglia agli amministratori che decidono di utilizzarle di acquisire familiarità e dimestichezza con la sintassi delle espressioni regolari. Le espressioni regolari scritte con una sintassi errata possono avere un impatto decisamente negativo sulle prestazioni. Trend Micro suggerisce di cominciare con espressioni regolari semplici che non utilizzano una sintassi complessa. Quando si introducono delle nuove regole, utilizzare l'azione di archiviazione e osservare il modo in cui il Messaging Security Agent gestisce i messaggi che utilizzano la regola introdotta. Quando si è certi che la regola non ha conseguenze impreviste, è il momento di modificare l'azione.

Esempi di espressione regolare

Consultare le seguenti tabelle per alcuni esempi di espressioni regolari. Per specificare un'espressione regolare, aggiungere un operatore ".REG." prima del modello.

Tabella 1. Conteggio e raggruppamento

Elemento

Significato

Esempio

.

Il punto rappresenta qualsiasi carattere salvo quello per passare a una nuova riga.

do. rileva don, dovere, dorato, dos, dot, ecc.

d.e rileva dove, dolore, ecc.

*

L'asterisco indica nessuna o varie occorrenze dell'elemento precedente.

no* rileva n, no, noo, nooo, noooo, ecc.

+

Il più indica una o varie occorrenze dell'elemento precedente.

no+ rileva no, noo, nooo, noooo, ecc. ma non n

?

Il punto interrogativo indica nessuna o una occorrenza dell'elemento precedente.

no?n rileva nn o non ma non noon, nooon ecc.

( )

Le parentesi permettono di considerare tutti i caratteri inclusi al loro interno come un'unica entità.

d(opo)+ rileva o dopoopo o dopoopoopo ecc. Il carattere + viene applicato alla sottostringa tra parentesi affinché la regex cerchi la d seguita da una o più occorrenze della stringa "opo".

[ ]

Le parentesi quadre indicano un insieme o una serie di caratteri.

d[aeiou]+ rileva da, de, di, do, du, daa, dae, dai, ecc. Il carattere + viene applicato all'insieme di caratteri tra parentesi quadre affinché la regex cerchi la d seguita da una o più occorrenze dei caratteri presenti [aeiou].

d[A-Z] rileva dA, dB, dC, e così via fino a dZ. L'insieme di caratteri tra parentesi quadre rappresenta la serie di tutte le lettere maiuscole comprese tra A e Z.

[ ^ ]

Il carattere accento circonflesso racchiuso tra parentesi quadre nega logicamente l'insieme o l'intervallo specificati; in tal modo la regex trova la corrispondenza tra qualsiasi carattere che non sia incluso nell'insieme o nell'intervallo.

d[^aeiouy] trova db, dc o dd, d9, d#--d seguiti da qualsiasi carattere singolo ad eccezione di una vocale.

{ }

I caratteri parentesi graffa specificano un numero determinato di occorrenze dell'elemento precedente. Un singolo valore all'interno delle parentesi graffe significa che verrà individuato soltanto il numero di occorrenze specificato. Una coppia di numeri separati da una virgola rappresenta un insieme di occorrenze valide del carattere precedente. Una singola cifra seguita da una virgola significa che non esiste alcun limite superiore.

da{3} trova daaa--d seguito da 3 occorrenze e non più di 3 di "a". da{2,4} trova daa, daaa, daaaa e daaaa (ma non daaaaa)--d seguiti da 2, 3 o 4 occorrenze di "a". da{4,} trova daaaa, daaaaa, daaaaaa ecc.--d seguiti da almeno 4 occorrenze di "a".

Tabella 2. Classi di caratteri (stenografia)

Elemento

Significato

Esempio

\d

Qualsiasi carattere numerico; a livello di funzione, equivale a [0-9] o [[:digit:]].

\d trova 1, 12, 123 ecc. ma non 1b7--uno o più caratteri numerici.

\D

Qualsiasi carattere non numerico; a livello di funzione, equivale a [^0-9] o [^[:digit:]].

\D trova a, ab, ab& ma non 1, ossia uno o più caratteri esclusi 0, 1, 2, 3, 4, 5, 6, 7, 8 o 9.

\w

Qualsiasi lettera, vale a dire qualsiasi carattere alfanumerico; a livello di funzione, equivale a [_A-Za-z0-9] o [_[:alnum:]]

\w trova a, ab, a1 ma non !&--una o più lettere maiuscole o minuscole o cifre ma non la punteggiatura o altri caratteri speciali.

\W

Qualsiasi carattere non alfanumerico; a livello di funzione, equivale a [^_A-Za-z0-9] o [^_[:alnum:]].

\W trova *, & ma non ace o a1--uno o più caratteri eccetto lettere maiuscole o minuscole e cifre.

\s

Qualsiasi carattere spazio vuoto; spazio, nuova riga, tabulatore, spazio unificatore ecc.; a livello di funzione, equivale a [[:space]].

verdura\\s trova "verdura" seguito da un carattere spazio vuoto. Quindi la frase "Sono un fan della musica rock" avvia la regex, mentre "Siamo fans della musica rock" no.

\S

Uno spazio non vuoto; qualsiasi carattere diverso da uno spazio, da una nuova riga, da un carattere tabulatore, da uno spazio unificatore ecc.; a livello di funzione, equivale a [^[:space]].

verdura\\S trova "verdura" seguito da un carattere diverso da spazio vuoto. Quindi la frase "Siamo fans della musica rock" avvia la regex, mentre "Sono un fan della musica rock" no.
Tabella 3. Classi di caratteri

Elemento

Significato

Esempio

[:alpha:]

Qualsiasi carattere alfabetico

.REG. [[:alpha:]] trova abc, def, xxx ma non 123 o @#$.

[:digit:]

Qualsiasi cifra; a livello di funzione, equivale a \d

.REG. [[:digit:]] trova 1, 12, 123 ecc.

[:alnum:]

Qualsiasi "lettera", vale a dire qualsiasi carattere alfanumerico; a livello di funzione, equivale a \w.

.REG. [[:alnum:]] trova abc, 123 ma non ~!@.

[:space:]

Qualsiasi carattere spazio vuoto; spazio, nuova riga, carattere tabulatore, spazio unificatore ecc.; a livello di funzione, equivale a \s.

.REG. (fan)[[:space:]] trova "fan" seguito da un carattere spazio vuoto. Quindi la frase "Sono un fan della musica rock" avvia la regex, mentre "Siamo fans della musica rock" no.

[:graph:]

Qualsiasi carattere esclusi gli spazi, i caratteri di controllo e caratteri simili.

.REG. [[:graph:]] trova 123, abc, xxx, ><” ma non lo spazio o i caratteri di controllo.

[:print:]

Qualsiasi carattere (simile a [:graph:]) ma comprende il carattere spazio.

.REG. [[:print:]] trova 123, abc, xxx, ><” e i caratteri spazio.

[:cntrl:]

Qualsiasi carattere di controllo (ad es. CTRL + C, CTRL + X)

.REG. [[:cntrl:]] trova 0x03, 0x08 ma non abc, 123, !@#.

[:blank:]

Caratteri spazio e tabulatore

.REG. [[:blank:]] trova i caratteri spazio e tabulatore ma non 123, abc, !@#

[:punct:]

Caratteri punteggiatura.

.REG. [[:punct:]] trova ; : ? ! ~ @ # $ % & * ‘ “ ecc. ma non 123, abc

[:lower:]

Qualsiasi carattere alfabetico minuscolo (Nota: Selezionare l'opzione 'Attiva corrispondenza maiuscole/minuscole', altrimenti il funzionamento è identico a quello di [:alnum:])

.REG. [[:lower:]] trova abc, Def, sTress, Do, ecc. ma non ABC, DEF, STRESS, DO, 123, !@#.

[:upper:]

Qualsiasi carattere alfabetico maiuscolo (Nota: Selezionare l'opzione 'Attiva corrispondenza maiuscole/minuscole', altrimenti il funzionamento è identico a quello di [:alnum:])

.REG. [[:upper:]] trova ABC, DEF, STRESS, DO ecc. ma non abc, Def, Stress, Do, 123, !@#.

[:xdigit:]

Cifre consentite in un numero esadecimale (0-9a-fA-F).

.REG. [[:xdigit:]] trova 0a, 7E, 0f ecc.

Tabella 4. Ancoraggi di pattern

Elemento

Significato

Esempio

^

Indica l'inizio di una stringa.

^(benché) trova qualsiasi blocco di testo che comincia con "benché". Quindi, la frase "benché io sia un fan della musica" avvia la regex mentre "Io sono un fan della musica benché" no.

$

Indica la fine di una stringa.

(benché)$ trova qualsiasi blocco di testo che finisce con "benché". Quindi, la frase "benché io sia un fan della musica" non avvia la regex mentre "Io sono un fan della musica benché" sì.

Tabella 5. Sequenze di escape e stringhe letterali

Elemento

Significato

Esempio

\

Per trovare alcuni caratteri che hanno un significato particolare nelle espressioni regolari (ad esempio "+").

(1) .REG. C\\C\+\+ trova ‘C\C++’.

(2) .REG. \* trova *.

(3) .REG. \? trova ?.

\t

Indica un carattere tabulatore.

(pane)\\t trova qualsiasi blocco di testo che contiene la sottostringa "pane" immediatamente seguita da un carattere tabulatore (ASCII 0x09).

\n

Indica il carattere della nuova riga.

Nota:

piattaforme diverse hanno modi diversi di rappresentare il carattere di nuova riga. In Windows, una nuova riga è rappresentata da una coppia di caratteri, un ritorno a capo seguito da un salto di riga. In Unix e Linux, una nuova riga è semplicemente un salto di riga, e nei Macintosh una nuova riga è semplicemente un ritorno a capo.

(pane)\n\n trova qualsiasi blocco di testo che contenga la sottostringa "pane" immediatamente seguita da due caratteri di nuova riga (ASCII 0x0A).

\r

Indica un carattere ritorno a capo.

(pane)\r trova qualsiasi blocco di testo che contenga la sottostringa "pane" immediatamente seguita da un carattere ritorno a capo (ASCII 0x0D).

\b

Indica un carattere backspace.

OR

Segnala limiti.

(pane)\b trova qualsiasi blocco di testo che contenga la sottostringa “pane” immediatamente seguita da un carattere backspace (ASCII 0x08).

Un limite di parola (\b) è un punto tra due caratteri con \w da un lato e \W dall'altro (in qualsiasi ordine), ritenendo i caratteri immaginari all'inizio e alla fine della stringa corrispondenti a \W. (nelle classi di caratteri \b rappresenta il backspace piuttosto che un limite di parola).

Ad esempio, la seguente espressione regolare può corrispondere al codice fiscale: .REG. \b\d{3}-\d{2}-\d{4}\b

\xhh

Indica un carattere ASCII con un determinato codice esadecimale (dove hh rappresenta un valore esadecimale a due cifre).

\x7E(\w){6} trova qualsiasi blocco di testo contenente una "parola" composta esattamente da sei caratteri alfanumerici preceduti da un carattere ~ (tilde). Quindi, vengono trovate le parole '~ab12cd', '~Pa3499' ma non la parola '~oops'.

Generatore di espressioni regolari

Quando si stabilisce come configurare le regole per Prevenzione della perdita di dati, considerare che il generatore dell'espressione regolare è in grado di creare solo espressioni semplici in base alle seguenti regole e limitazioni:

  • Solo i caratteri alfanumerici possono essere variabili.

  • Tutti gli altri caratteri, quali [-], [/] e così via possono essere solo costanti.

  • Gli intervalli di variabili possono essere solo A-Z e 0-9; non è possibile stabilire altri limiti, ad esempio A-D.

  • Le espressioni regolari generate da questo strumento sono indipendenti dall'uso di maiuscole e minuscole.

  • Le espressioni regolari generate da questo strumento possono effettuare solo corrispondenze positive, non negative ("se non corrisponde").

  • Le espressioni basate sul campione possono corrispondere solo al numero esatto di caratteri e spazi riportati nel campione. Lo strumento non è in grado di generare la corrispondenza "uno o più" di un determinato carattere o stringa.

Sintassi con espressioni complesse

Una parola chiave è composta da token, cioè le più piccole unità utilizzate per individuare corrispondenze tra l'espressione e il contenuto. Un token può essere un operatore, un simbolo logico o l'operando, vale a dire l'argomento o il valore su cui agisce l'operatore.

Gli operatori includono .AND., .OR., .NOT., .NEAR., .OCCUR., .WILD., ".(." e " .)." L'operando e l'operatore devono essere separati da uno spazio. Un operando può contenere vari token. Vedere Parole chiave.

Espressioni regolari all'opera

L'esempio seguente descrive il funzionamento del filtro di contenuti delle tessere sanitarie, uno dei filtri predefiniti:

[Formato] .REG. \b\d{3}-\d{2}-\d{4}\b

L'espressione precedente utilizza \b, un carattere backspace, seguito da \d, qualsiasi cifra e da {x}, che indica il numero di cifre, e infine da -, il trattino. Questa espressione trova il codice fiscale. La tabella seguente descrive le stringhe che trovano l'espressione regolare esemplificativa:

Tabella 6. Numeri che corrispondono all'espressione regolare per i codici fiscali

.REG. \b\d{3}-\d{2}-\d{4}\b

333-22-4444

Corrisponde

333224444

Non corrisponde

333 22 4444

Non corrisponde

3333-22-4444

Non corrisponde

333-22-44444

Non corrisponde

Se si modifica l'espressione come segue,

[Formato] .REG. \b\d{3}\x20\d{2}\x20\d{4}\b

la nuova espressione trova questa sequenza:

333 22 4444