Espressioni Regolari - I caratteri speciali
Non abbiamo ancora finito con le possibilità del metacarattere \ .
All'inizio abbiamo visto che se \ è seguito da un metacarattere, questo cessa di essere metacarattere e torna al suo significato letterale.
Ci si può aspettare il viceversa? Se metto un carattere qualunque dopo \, questo carattere qualunque assume i poteri di un metacarattere?
Qualche volta sì, e viene detto carattere speciale. Vediamo i casi:
\a un carattere di allarme (il carattere ASCII "BEL", con valore esadecimale 07).
\b un carattere word boundary (limitatore di parola); o backspace (il carattere ASCII "BS", con valore esadecimale 08) se \b è dentro una classe di caratteri.
\B un carattere non word boundary.
\d un qualunque carattere che sia una cifra; è equivalente a [0-9] .
\D tutto ciò che non è \d; è equivalente a [^0-9] o a [^\d].
\e un carattere di escape (il carattere ASCII "ESC", con valore esadecimale 1b).
\f un carattere di form feed (il carattere ASCII "FF", con valore esadecimale 0c).
\n un carattere di nuova linea (il carattere ASCII "NL", con valore esadecimale 0a).
\r un carattere di carriage return (il carattere ASCII "CR", con valore esadecimale 0d)(invio).
\s un qualunque carattere che crea spazi (tabulazione, spazio, nuova linea,...);
è equivalente a [ \f\n\r\t] .
\S tutto ciò che non è \s .
\t un carattere di tabulazione (il carattere ASCII "HT", con valore esadecimale 09).
\w un qualunque carattere alfanumerico, compreso il carattere sottolineato;
è equivalente a [a-zA-Z0-9_] .
\W tutto ciò che non è \w; è equivalente a [^a-zA-Z0-9_] o a [^\w] .
\xnn il carattere ASCII il cui codice esadecimale è nn.
\x{nnnn} il carattere Unicode il cui codice esadecimale è nnnn.
\A indicatore di inizio testo.
\Z indicatore di fine testo.
Per il significato preciso di questi due ultimi caratteri speciali vedi la pagina approfondimenti al paragrafo "modificatori".
Osservazioni:
Notate che i caratteri speciali possono essere tranquillamente usati anche dentro le classi di caratteri.
\b indica il punto di inizio o il punto di fine di una parola, indifferentemente.
Pensate a un punto immaginario, senza dimensione, che ha da una parte un \w e dall'altra parte un \W .
Con \b si può facilmente cercare una parola intera, dove per parola si intende una sequenza di caratteri alfanumerici; ad esempio \bA1\b darà soltanto:
Le autostrade A1 e A14 oggi sono molto ...
Notate che l'ultima occorrenza di A1 non viene trovata perché non è una parola a sé stante ma fa parte della parola A14.
Questo significato di \b non avrebbe più alcun senso all'interno di una classe di caratteri [ ], allora in questo ambito [\b] assume il significato di carattere di backspace.
Per terminare una linea di testo Windows usa \r\n, Unix usa solo \n .
Mentre \t rappresenta solo un carattere tab, \s rappresenta un insieme di caratteri, tutti quelli che creano spazi bianchi, indifferentemente.
L'input di un utente potrebbe contenere un numero imprecisato di spazi o di tab: allora invece di inserire nella regex un'espressione come [ \t]* , possiamo più semplicemente scrivere \s* .
\w è molto utile nella forma \w+ , per indicare una qualunque parola.
Possiamo inserire nelle regex anche caratteri non presenti sulla tastiera: se per esempio vogliamo inserire il carattere di coyright ©, usiamo \xA9 dove A9 è il codice esadecimale di ©.
Svolgi gli esercizi del Gruppo 6