Capitolo 9. Pattern matching

Sommario

Introduzione
Dettagli

Introduzione

Questa sezione tratta la sintassi con cui è possibile esprimere una condizione da verificare (pattern matching), in particolare vengono prese in considerazione le simple expression, le regular expression e le case sensitive simple expression

L'idea alla base del pattern matching è quella di utilizzare regole che consentano di esprimere condizioni sulle stringhe in modo semplice e flessibile. Nel caso specifico di eXtensiveControl®, le stringhe vengono utilizzate per imporre delle condizioni sui filtri, ma più in generale si tratta di trovare una corrispondenza attraverso una stringa campione (pattern) all'interno di un testo (o stringa) da analizzare. Per quanto riguarda la posta elettronica, si tratta di trovare una corrispondenza all'interno del messaggio o di un header dello stesso.

Si consideri ad esempio la necessità di esprimere una regola che blocchi l'utente user01 appartenente al dominio example.com. Tale condizione può essere espressa semplicemente digitando nell'apposito box user01@example.com e verificando ad esempio che il campo di applicazione sia il "from" del messaggio se si desidera imporre una condizione (ad esempio un divieto) sull'invio dei messaggi da parte di quell'utente specifico.

Le cose si complicano se però si vuole allargare il campo di applicazione di tale regola non ad un utente specifico ma a molti; per esempio agli utenti userXX@example.com, ove XX è un numero a 2 cifre che va da 01 a 99. Si desidera cioè applicare la condizione ai primi 99 utenti del dominio. Naturalmente si potrebbero imporre 99 condizioni, una per ogni utente, tuttavia questo modo di procedere è poco pratico e soggetto ad errori. Per esprimere queste condizioni si possono usare forme espressive più elastiche che consentono di definire degli insiemi in maniera più semplice e veloce.

  • Simple expression: le simple expression prevedono l'utilizzo di due caratteri speciali, l'asterisco (*) e il punto interrogativo (?). Questi caratteri, detti meta-caratteri, hanno un significato particolare quando utilizzati in una stringa campione con cui cercare una corrispondenza nel testo. Il significato di questi caratteri è analogo a quello a loro dato in altri contesti ad esmepio il comando di shell DOS dir. In particolare, quando si usa l'asterisco, viene verificata la corrispondenza con qualunque insieme di caratteri, in altre parole può essere sostituita con una sequenza arbitraria di caratteri. Il punto interrogativo rappresenta invece un singolo carattere, quindi può essere sostituito con un carattere qualunque.

    Ad esempio:

    user@example.comla condizione è verificata se trova la stringa user@example.com. Notare che il confronto è case insensitive e quindi viene verificato anche User@Example.com così come uSeR@eXaMpLe.CoM.
    user?@example.comin questo caso la condizione è verificata se la stringa corrisponde a meno del carattere ? che può essere sostituito da un qualunque carattere. Ad esempio la condizione è verificata per user1@example.com, user2@example.com, user3@example.com, ecc., ma non ad esempio per user@example.com o per user10@example.com.
    user*@example.comin questo modo invece la condizione è verificata se la stringa ha come prefisso user e come suffisso @example.com. Qualunque sequenza di caratteri fra il prefisso e il suffisso viene accettata. Ad esempio: user1@example.com ed anche user10@example.com, user10@example.com, user100@example.com, user10_temporary_account@example.com, ecc.
  • Le case sensitive simple expression sono equivalenti alle simple expression ad eccezione del fatto che sono (come il nome stesso suggerisce) case sensitive, ossia viene fatta distinzione fra minuscole e maiuscole. Quindi ad esempio se il pattern di confronto fosse come nel primo punto del caso precedente user@example.com la corrispondenza è verificata per user@example.com ma non User@example.com.

  • Le regular expression sono un argomento piuttosto complesso che necessita di una trattazione a parte ed esula dallo scopo di questo manuale di supporto. Esse consistono in un insieme di regole che permette di esprimere con una semplice stringa condizioni particolamente complesse.

    Esiste parecchio materiale sia sulla rete Internet sia in forma cartacea sulle regular expression per chi fosse interessato ad approfondire questo argomento. Sebbene in questo contesto non si desideri dare indicazioni specifiche in materia, è comqune consigliabile fare una prova digitando regular expression su uno dei tanti motori di ricerca disponibili al fine di avere maggiori informazioni a riguardo e farsi una idea più specifica dell'argomento.

Dettagli

Per default la stringa che viene digitata nel box associato alla condizione viene considerata una simple expression; se si desidera imporre una regular expression occorre utilizzare la sintassi


re{ ... }  
 

ove al posto dei puntini viene inserita l'espressione vera e propria. Nel caso si desideri invece esprimere una case sensitive simple expression occorre utilizzare la sintassi


cs{ ... }  
 

Seguono alcuni esempi di stringhe con il relativo significato:

re{user[0..9]+@example.com}questa è una regular expression che permette di verificare una qualunque forma del tipo userXXX@example.com, ove al posto di XXX può comparire una qualunque sequenza di caratteri numerici (cioè da 0 a 9).
cs{user@example.com}vale lo stesso discorso della prima simple expression, con la differenza che qui è importante distinguere fra minuscole e maiuscole. Quindi ad esempio è verificata user@example.com ma non User@example.com.

Da notare che tutte le stringhe vengono inserite in una sola riga, eventuali andate a capo sono da considerarsi solamente funzionali al layout del testo di questo help.