Espressioni regolari tradizionali di UNIX [modifica]
La sintassi di base delle espressioni regolari in UNIX è attualmente definita obsoleta dallo standard POSIX, ma è comunque molto usata a causa della sua diffusione. La maggior parte dei programmi che utilizzano le regexp, come grep e sed, utilizzano tali regole di base fornendo al contempo supporto per le nuove regole estese.
In questa sintassi, la maggior parte dei caratteri sono visti come letterali, e trovano solo se stessi ("a" trova "a", "bc)" trova "bc)" ecc.). Le eccezioni a questa regola sono i metacaratteri:
. |
Trova ogni singolo carattere (se è nella modalità linea singola altrimenti se è in multiriga prende tutti i caratteri diversi da \n, ovvero un a capo). |
[ ] |
Trova un singolo carattere contenuto nelle parentesi. Ad esempio, [abc] trova o una "a", "b", o "c". [a-z] è un intervallo e trova ogni lettera minuscola dell'alfabeto. Possono esserci casi misti: [abcq-z] trova a, b, c, q, r, s, t, u, v, w, x, y, z, esattamente come [a-cq-z]. Il carattere '-' è letterale solo se è primo o ultimo carattere nelle parentesi: [abc-] o [-abc]. Per trovare un carattere '[' o ']', il modo più semplice è metterli primi all'interno delle parentesi: [][ab] trova ']', '[', 'a' o 'b'. |
[^ ] |
Trova ogni singolo carattere non incluso nelle parentesi. Ad esempio, [^abc] trova ogni carattere diverso da "a", "b", o "c". [^a-z] trova ogni singolo carattere che non sia una lettera minuscola. Come sopra, questi due metodi possono essere usati insieme. |
^ |
Corrisponde all'inizio della stringa (o di ogni riga della stringa, quando usato in modalità multilinea) |
$ |
Corrisponde alla fine della stringa o alla posizione immediatamente precedente un carattere di nuova linea (o alla fine di ogni riga della stringa, quando usato in modalità multilinea) |
( ) |
Definisce una "sottoespressione marcata". Ciò che è incluso nell'espressione, può essere richiamato in seguito. Vedi sotto, \n. |
\n |
Dove n è una cifra da 1 a 9; trova ciò che la nesima sottoespressione ha trovato. Tale costrutto è teoricamente irregolare e non è stato adottato nella sintassi estesa delle regexp. |
* |
|
{x,y} |
Trova l'ultimo "blocco" almeno x volte e non più di y volte. Ad esempio, "a{3,5}" trova "aaa", "aaaa" o "aaaaa". |
Vecchie versioni di grep non supportano il separatore alternativo "|".
Esempi:
".atto" trova ogni stringa di cinque caratteri come gatto, matto o patto
"[gm]atto" trova gatto e matto
"[^p]atto" trova tutte le combinazioni dell'espressione ".atto" tranne patto
"^[gm]atto" trova gatto e matto ma solo all'inizio di una riga
"[gm]atto$" trova gatto e matto ma solo alla fine di una riga
Dal momento che molte serie di caratteri variano a seconda della configurazione locale (in alcuni casi le lettere sono organizzate in abc..xyzABC...XYZ, in altri aAbB..yYzZ), lo standard POSIX ha definito alcune classi o categorie di caratteri come mostrato nella seguente tabella:
classe POSIX |
sintassi normale |
significato |
[:upper:] |
[A-Z] |
lettere maiuscole |
[:lower:] |
[a-z] |
lettere minuscole |
[:alpha:] |
[A-Za-z] |
lettera sia maiuscole che minuscole |
[:alnum:] |
[A-Za-z0-9] |
numeri e lettere maiuscole e minuscole |
[:digit:] |
[0-9] |
numeri |
[:xdigit:] |
[0-9A-Fa-f] |
numeri in formato esadecimale |
[:punct:] |
[.,!?:...] |
segni di interpunzione |
[:blank:] |
[ \t] |
spazio o TAB |
[:space:] |
[ \t\n\r\f\v] |
caratteri vuoti |
[:cntrl:] |
|
caratteri control |
[:graph:] |
[^ \t\n\r\f\v] |
caratteri non vuoti |
[:print:] |
[^\t\n\r\f\v] |
caratteri non vuoti e spazi |
Le parentesi quadrate fanno parte della sintassi per indicare la classe di caratteri. Ad esempio [[:upper:][:digit:]ab] trova corrispondenza in una qualsiasi lettera maiuscola, in una qualsiasi cifra, nella lettera 'a' minuscola e nella lettera 'b' minuscola.