Espressioni regolari per il filtro ISAPI Rewrite
Pagina 1 di 3
In un precedente articolo del mio amico e collega Luca Ruggiero abbiamo visto come iniziare a lavorare con il filtro ISAPI per il rewriting delle URL su IIS.
Questo articolo si pone come una sorta di continuazione del percorso precedentemente iniziato e si pone l'obiettivo di illustrarvi un po' di teoria al fine di consentirvi di scrivere istruzioni di rewriting sempre più complesse ed articolate grazie al supporto delle espressioni regolari.
I caratteri speciali
Iniziamo col vedere i cd. caratteri speciali, ovvero quei caratteri che assumono un significato particolare rispetto alla loro classica valenza testuale:
| Carattere | Significato |
| . | Qualsiasi carattere |
| * | Zero o più ripetizioni del carattere posto a sinistra |
| + | Uno o più ripetizioni del carattere posto a sinistra |
| ? | Il carattere posto a sinistra può essere presente oppure no |
| | | Alternativa tra ciò che vi è a destra e a sinistra |
| ^ | Inizio della linea oppure simbolo di negazione se utilizzato all'interno di un set di caratteri |
| $ | Fine della linea |
| ( e ) | Vengono utilizzate per creare delle sub-espressioni oppure per identificare la variabile che verrà poi richiamata con $N |
| { e } | Vengono utilizzate per indicare la lunghezza minima e massima della stringa posta a sinistra |
| [ e ] | Racchiude un set di caratteri |
Facciamo qualche esempio per capire meglio il significato di questi caratteri speciali.
.Significa qualsiasi carattere e pertanto accetta un (uno!) qualsiasi carattere.
.*L'espressione qui sopra è sempre verificata, in quanto accetta sia una stringa vuota che una stringa qualsiasi, in quanto la nostra simbologia prevede una ripetizione indefinita (da zero a infinito) di caratteri qualsiasi.
ab*Questa espressione è verificata con i seguenti risultati: "a", "ab", "abb", "abbb", "abbbb",...
ab+Si verifica con: "ab", "abb", "abbb",... ma non con "a"!
ab?Si verifica con "a" oppure "ab".
ab{2,4}
Si verifica con: "abb", "abbb", "abbbb".
^a.*Si verifica con una qualsiasi stringa che inizia con la lettera "a"
.*z$Si verifica con una qualsiasi stringa che termina con la lettera "z"
^c.*a$Si verifica con una qualsiasi stringa che inizia con "c" e termina con la lettera "a". Ad esempio: "casa", "carta", "colla", ecc.
abc|defSi verifica con "abc" oppure con "def"
a(b|c)Si verifica con "ab" oppure con "ac". Per ottenere questo risultato abbiamo utilizzato una coppia di parentesi tonde per creare una sotto-espressione contemplante, nel nostro esempio, l'alternativa tra "b" e "c"
[a-z]Con l'uso delle parentesi quadre abbiamo creato un set di caratteri. Nel nostro esempio abbiamo previsto un range di caratteri che va dalla "a" alla "z" e quindi abbraccia tutto l'alfabeto.
Si noti che il ricorso ad "a-z" non è uguale a "A-Z" in quanto nel primo caso si avrà corrispondenza solo con le lettere minuscole, nel secondo solo con le maiuscole.
[a-zA-Z]L'espressione qui sopra, invece, ci mostra come accettare tutti i caratteri dell'alfabeto siano essi minuscoli o maiuscoli.
[0-9]Questa espressione prevede un qualsiasi numero compreso tra 0 e 9.
[^0-9]Questa espressione prevede un qualsiasi carattere eccetto i numeri. Abbiamo ottenuto questo risultato di negazione utilizzando, all'inizio del nostro set, il carattere speciale ^.
Ovviamente, articolando e combinando i vari esempi visti sopra vi accorgerete come sia possibile prevedere un numero pressochè infinito di possibilità.
Per finire, ovviamente, dobbiamo considerare la possibilità che i caratteri visti sopra ci possano servire nella loro valenza classica, cioè quali semplici caratteri. In questo caso dovremo fare ricorso al carattere di escape (\) prima del carattere speciale che vogliamo usare come carattere comune.
Per fare un esempio vediamo come scrivere, sotto forma di esepressione, la stringa "pagina.html". Come sappiamo il punto è un carattere speciale e, pertanto, per utilizzarlo come semplice punto dobbiamo fare così:
pagina\.htmlSi noti, ovviamente, che lo stesso carattere di escape è, a sua volta, un carattere speciale e pertanto, qualora si voglia utilizzarlo nella sua comune valenza letterale, dovremo fare ricorso ad un doppio escape:
\\







