Espressioni regolari nelle regole di trasporto

 

Si applica a: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2007

Ultima modifica dell'argomento: 2009-04-09

In questo argomento viene descritta la procedura di implementazione delle espressioni regolari che possono esser utilizzate con i predicati nelle regole di trasporto. I predicati vengono utilizzati dalle condizioni e dalle eccezioni per determinare l'opportunità o meno di applicare una o più azioni configurate a un messaggio di posta elettronica.

Per ulteriori informazioni sulle regole di trasporto, vedere Cenni preliminari sulle regole di trasporto.

Espressioni regolari

È innanzitutto necessario comprendere cosa sia una espressione semplice. Una espressione semplice rappresenta un valore specifico che si desidera associare a una condizione o a una eccezione. Un esempio di espressione semplice è costituito dal titolo di un documento che l'organizzazione di cui si è parte non intende distribuire all'esterno. Una porzione di dati contenuti in un messaggio di posta elettronica deve corrispondere esattamente a una espressione semplice per poter soddisfare una condizione o una eccezione nelle regole di trasporto.

Una espressione regolare è una notazione concisa e flessibile che consente di trovare schemi di testo in un messaggio. La notazione è composta da due tipi di carattere di base: caratteri di testo letterali (normali) che indicano il testo che deve essere presente nella stringa di destinazione e metacaratteri che indicano o controllano le possibili variazioni del testo nella stringa di destinazione. Le espressioni regolari possono essere utilizzate per analizzare rapidamente i messaggi di posta elettronica e trovare schemi specifici di caratteri.

La possibilità di trovare schemi di testo in un messaggio di posta elettronica consente di associare i predicati in base ai dati dei messaggi che possono variare in modo dinamico. Esempi di dati di questo tipo sono i codici fiscali e i numeri dei brevetti. Non è possibile associare questi dati a una espressione semplice in quanto per quest'ultima è necessario specificare ogni variazione del valore che si desidera individuare. Se si utilizzano le espressioni regolari è possibile configurare il predicato per eseguire la ricerca dello schema dei codici fiscali o dei numeri dei brevetti in un messaggio.

È possibile utilizzare le espressioni regolari in qualsiasi predicato della regola della condizione o eccezione eccetto se "è un rapporto di recapito". Per ulteriori informazioni su quali sono i predicati che accettano i criteri di ricerca delle espressioni regolari, vedere Predicati delle regole di trasporto.

Implementazione delle espressioni regolari

In Exchange Management Shell è possibile utilizzare le espressioni regolari per qualsiasi predicato che accetta la proprietà del predicato Patterns. In Exchange Management Console è possibile utilizzare le espressioni regolari con qualsiasi condizione o eccezione che contiene le parole con schemi di testo. Nella Tabella 1 sono elencate tutte le stringhe degli schemi che possono essere utilizzati per creare i criteri di ricerca dell'espressione regolare.

Avviso

È necessario verificare attentamente le espressioni regolari create per assicurarsi che forniscano i risultati previsti. Una espressione regolare non correttamente configurata potrebbe produrre corrispondenze non previste e causare un comportamento anomalo nelle regole di trasporto. È opportuno testare le espressioni regolari in un ambiente di prova prima di implementarle nell'ambiente di produzione.

Tabella 1   Stringhe degli schemi

Stringa dello schema Descrizione

\S

La stringa dello schema \S corrisponde a qualsiasi singolo carattere eccetto lo spazio.

\s

La stringa dello schema \s corrisponde a un qualsiasi spazio singolo.

\D

La stringa dello schema \D corrisponde a qualsiasi cifra non numerica.

\d

La stringa dello schema \d corrisponde a qualsiasi cifra numerica singola.

\w

La stringa dello schema \w corrisponde a qualsiasi singolo carattere Unicode classificato come lettera o cifra decimale.

|

Il carattere barra verticale ( | ) consente di eseguire la funzione OR.

*

Il carattere jolly ( * ) corrisponde a zero o più istanze del carattere che lo precede. Ad esempio, ab*c corrisponde alle stringhe seguenti: ac, abc, abbbbc.

( )

Le parentesi fungono da delimitatori di raggruppamenti. Ad esempio, a(bc)* corrisponde alle stringhe seguenti: a, abc, abcbc, abcbcbc e così via……

\

La barra rovesciata ( \ ) è il carattere di escape che viene utilizzato insieme a un carattere speciale. Di seguito sono riportati i caratteri speciali che vengono usati nelle stringhe di ricerca:

  • Barra rovesciata: \

  • Barra verticale: |

  • Asterisco: *

  • Parentesi di apertura: (

  • Parentesi di chiusura: )

  • Accento circonflesso: ^

  • Dollaro: $

Se si desidera, ad esempio, eseguire la corrispondenza di una stringa contenente (525), digitare \(525\).

\\

Utilizzare due barre rovesciate quando si desidera che il carattere di barra rovesciata venga riconosciuto come tale e non come carattere di escape. Se si desidera, ad esempio, eseguire la corrispondenza di una stringa contenente \d, digitare \\d.

^

L'accento circonflesso ( ^ ) indica che la stringa dello schema che lo segue deve trovarsi all'inizio della stringa di testo per cui si esegue la corrispondenza. Ad esempio, ^fred@contoso corrisponde a fred@contoso.com e a fred@contoso.co.uk ma non a alfred@contoso.com.

È possibile utilizzare questo carattere anche con il simbolo del dollaro ( $ ) per specificare una stringa esatta da corrispondere. Ad esempio, ^kim@contoso.com$ corrisponde solo a kim@contoso.com e non a stringhe come kim@contoso.com.au.

$

Il simbolo del dollaro ( $ ) indica che la stringa dello schema che lo precede deve trovarsi alla fine della stringa di testo per cui si esegue la corrispondenza. Ad esempio, contoso.com$ corrisponde a adam@contoso.com e a kim@research.contoso.com ma non a kim@contoso.com.au.

È possibile utilizzare questo carattere anche con l'accento circonflesso ( ^ ) per specificare una stringa esatta per cui deve essere eseguita la corrispondenza. Ad esempio, ^kim@contoso.com$ corrisponde solo a kim@contoso.com e non a stringhe come chris@sales.contoso.com.

Utilizzando la tabella 1 è possibile creare una espressione regolare che corrisponde allo schema dei dati che per cui si desidera eseguire la corrispondenza. Esaminare ciascun carattere o gruppo di caratteri contenuti nei dati per cui si desidera eseguire la corrispondenza procedendo da sinistra verso destra. Leggere la descrizione di ciascuna stringa dello schema per determinare il modo in cui viene applicata ai dati per cui si esegue la corrispondenza. Determinare quindi quale stringa dello schema presente nella tabella 1 rappresenta il carattere o il gruppo di caratteri e aggiungerla all'espressione regolare. Dopo aver eseguito queste operazioni si avrà come risultato un'espressione regolare completa.

Ad esempio, l'espressione regolare che segue, corrisponde ai numeri telefonici utilizzati nel Nord America nei formati 425 555-0100 e 425.555.0100:

425(\s|.)\d\d\d(-|.)\d\d\d\d

È possibile elaborare questo esempio aggiungendo il formato (425) 555-0100, dove le parentesi delimitano il prefisso. L'espressione regolare seguente corrisponde a tutti e tre i formati dei numeri telefonici:

(\\()*\d\d\d(\\)|\s|.)\d\d\d(-|.)\d\d\d\d

L'esempio precedente può essere analizzato come segue:

  • (\\()*   Questa sequenza rende la prima parentesi sia facoltativa. Poiché la parentesi di chiusura è anche un delimitatore di un'espressione regolare, deve essere seguita dalla sequenza di escape utilizzando le due barre rovesciate \\. Le parentesi tonde intorno (()) raggruppano insieme i caratteri \\( in modo che il carattere jolly * si comporti secondo i caratteri \\( rendendoli facoltativi.

  • \d\d\d   Questa sequenza indica che deve essere seguita necessariamente da tre cifre numeriche.

  • (\\)|\s|.)   Questa sequenza indica che dopo le tre cifre numeriche sono presenti una parentesi di apertura, uno spazio o un punto. Ciascuna stringa corrispondente a un carattere è contenuta nei delimitatori di raggruppamenti ed è separata dal carattere barra verticale. Il che significa che solo uno dei caratteri specificati all'interno dei delimitatori di raggruppamenti può trovarsi in questa posizione nella stringa per cui si esegue la corrispondenza.

  • \d\d\d   Questa sequenza indica che deve essere seguita necessariamente da tre cifre numeriche.

  • (-|.)   Questa sequenza indica che il numero a tre cifre deve essere seguito da un trattino o da un punto. Poiché il trattino e il punto sono racchiusi dai delimitatori di raggruppamenti, soltanto uno dei due caratteri può trovarsi in questa posizione nella stringa per cui si esegue la corrispondenza.

  • \d\d\d\d   Questa sequenza indica che deve essere seguita necessariamente da quattro cifre numeriche.

Esempio di una regola di trasporto che utilizza una espressione regolare

Nell'esempio che segue viene descritto come utilizzare le espressioni regolari quando si crea una nuova regola in Exchange Management Shell:

Per creare una regola di trasporto che utilizza espressioni regolari da corrispondere ai numeri dei codici fiscali presenti nell'oggetto di un messaggio di posta elettronica

  1. Eseguire i comandi riportati di seguito:

    $Condition = Get-TransportRulePredicate SubjectMatches
    $Condition.Patterns = @("\d\d\d-\d\d-\d\d\d\d")
    $Action = Get-TransportRuleAction RejectMessage
    $Action.RejectReason = "The transmission of Social Security Numbers is prohibited."
    New-TransportRule -Name "Social Security Number Block Rule" -Conditions $Condition -Actions $Action 
    
  2. Per visualizzare la nuova regola di trasporto, eseguire il comando riportato di seguito:

    Get-TransportRule "Social Security Number Block Rule" | Format-List
    

Quando si esegue il comando Get-TransportRule, vengono visualizzate le seguenti informazioni:

Identity           : Social Security Number Block Rule,753ed939-1227-4b2a-a8e0-ec49b0615f30
Name               : Social Security Number Block Rule
RuleCollectionName : Transport
Priority           : 0
Comments           :
ManuallyModified   : False
Conditions         : {SubjectMatches}
Exceptions         :
Actions            : {RejectMessage}
State              : Enabled
IsValid            : True
ObjectState        : Unchanged

Ulteriori informazioni

Per informazioni dettagliate sulla sintassi e sui parametri relativi a ciascun comando, vedere i seguenti argomenti:

Per ulteriori informazioni sulle regole di trasporto, vedere i seguenti argomenti: