&xwp; usa una combinazione di molti standard per la sintassi delle RE.
Il livello di funzionalit… Š modellato per la massima parte vicino alle espressioni
regolari estese (ERE) supportate dai programmi UNIX
egrep e awk.
Sono supportati inoltre alcuni miglioramenti introdotti dal POSIX, tipicamente presenti
nei programmi UNIX ex e vi.
Vengono applicate le seguenti regole (si consulti Definizione BNF per una definizione formale):
Caratteri base
abc corrisponde ad a, quindi b,
quindi c.
~ . ^ $ ( ) { } [ ] ? + * |
Per esempio, 1\*2 corrisponde a 1, quindi *,
quindi 2.
c:\\config\.sys corrisponde a c:\config.sys.
\n nuova linea ASCII 10 \t tabulazione ASCII 9 \r ritorno carrello ASCII 13 \b backspace ASCII 8 \f nuova pagina \e escape ASCII 27 \x07 campanello ASCII 7I programmatori C e C++ sono familiari a questa notazione. Strettamente parlando, in accordo al POSIX, se
\x2e venisse messo in una ERE
dovrebbe significare "qualsiasi carattere" (Il carattere ASCII 0x2e Š il punto, che significa appunto
qualsiasi carattere; si veda oltre), ma questa implementazione lo tratta come
"corrispondere a un punto".
\< significa 'inizio di parola' (si veda oltre).
Il carattere dopo il backslash viene scelto generalmente come qualcosa che non ha bisogno di
escape, cosŤ questa sintassi non dovrebbe causare
alcun problema.
Gli insiemi di caratteri sono specificati in parentesi angolari e definiscono un insieme di caratteri accettabili, o se possibile un insieme di caratteri non accettabili.
[abc] corrisponde con a, b, o c [^abc] corrisponde con tutto ci• che non sia a, b, n‚ c [a-z] Š l'insieme di caratteri tra 'a' e 'z' [a-j-t] Š l'insieme di caratteri tra 'a' e 't'Per corrispondere con un carattere
-, ^, ] in un elemento
in parentesi, lo si preceda con un escape (backslash). Per esempio,
[\])}] corrisponde a ], o ), o }.
Ô anche possibile specificare una classe di caratteri POSIX completa in parentesi addizionali
accoppiate a "due punti". In questo contesto,
[:alnum:] significa tutti i caratteri alfanumerici
(in ASCII, Š come dire A-Za-z0-9)
[:lower:] significa tutti i caratteri alfabetici minuscoli
... etc.
Per esempio, specificando [[:alnum:] \t] verranno
cercati tutti i caratteri alfanumerici pi— la tabulazione.
Tutti i caratteri
Il carattere "punto" (.) corrisponde a qualsiasi singolo carattere, senza
curarsi di cosa questo sia. Per esempio, t.e corrisponde a
the, ma non a tree.
Caratteri costitutivi di parole
Le ERE GNU definiscono il termine "carattere costitutivo di parole" per includere
qualsiasi carattere alfanumerico, oppure il simbolo di sottolineatura _
per risparmiare un po' di digitazione.
\w Š una scorciatoia per tutti i caratteri costitutivi di parole
ed equivale a [[:alnum:]_] o [A-Za-z0-9_].
\W vale per ogni carattere non costitutivo di parole ed
equivale a [^[:alnum:]_] o [^A-Za-z0-9_].
Queste scorciatoie non sono valide all'interno di insiemi di caratteri tra parentesi quadre.
Non-carattere
Una estensione Microsoft alle ERE permette di dire
"qualsiasi carattere tranne questo" precedendo il carattere scelto con una tilde
~.
Questa Š una via breve equivalente alla specifica del carattere
in parentesi quadre
(~a Š pi— breve di [^a]).
Per esempio, t~he corrisponde a
tie, ma non a the.
Ancore
Le ancore specificano condizioni in cui potrebbe occorrere un'espressione:
^ corrisponde se si Š in inizio stringa $ corrisponde se si Š in fine stringa \` alternativa GNU per ^ \' alternativa GNU per $ \< corrisponde all'inizio di una parola (o di una stringa) \> corrisponde alla fine della parola (o della stringa) \B corrisponde all'interno di una parola \y corrisponde all'inizio o alla fine di una parola (o di una stringa)Qui si intende per "parola" la definizione data sopra secondo il GNU.
Per esempio, ^xyz corrisponde con xyz solo se si trova all'inizio
della linea. \<fred corrisponde a fred,
freddy, ma non ad alfred.
Ripetizioni
Usando ?, +, {M}, o {M,N}
Š possibile ricercare ripetizioni:
ab?c corrisponde con a, quindi con nessuna o un'occorrenza di b, quindi c
ab+c corrisponde con a, quindi con una o pi— occorrenze di b, quindi c
ab*c corrisponde con a, quindi con nessuna o pi— occorrenze di b, quindi c
ab{M}c corrisponde con a, quindi con M occorrenze di b, quindi con c
ab{M,}c corrisponde con a, quindi con M o pi— occorrenze di b, quindi con c
ab{M,N}c corrisponde con a, quindi con un numero di occorrenze di b tra M ed N, quindi con c
Nella lista sopra, M ed N sono numeri decimali, e se vengono dati entrambi, M dev'essere maggiore o uguale a N.
Per esempio, [A-Za-z_][A-Za-z0-9_]*
corrisponde con ogni identificatore C o C++ lecito. \w{10,} corrisponde con almeno
10 caratteri costitutivi di parole. \<[0-9]{5}\> corrisponde con un
numero a 5 cifre.
Alternanza
Ô possibile cercare una cosa o un'altra usando il simbolo |.
Per esempio, fred|bill corrisponde a fred o bill.
fred|bill|rob corrisponde con uno qualsiasi dei tre.
ERE annidate
Si possono usare parentesi per raggruppare ERE in sub-ERE, cosŤ che gli operatori come
quelli di ripetizione o di alternanza possano esservi applicati.
Per esempio, (frog|toad)+ corrisponde con una o pi— occorrenze di
frog o toad.
L'annidamento pu• essere portato per molti livelli.
Retro-riferimenti
Ogni volta che viene trovata una ERE annidata, quello che viene trovato viene immagazzinato. Ô possibile fare un retro-riferimento (riferirsi a questo risultato) pi— avanti nella ERE principale (ossia, qualunque cosa sia stata incontrata prima dev'essere incontrato ancora) specificando un backslash con una cifra decimale. Si possono retro-riferire fino a 9 ERE annidate.
Per esempio, \2 significa che la seconda ERE annidata dev'essere
incontrata un'altra volta. Come risultato,
(a|b)(c|d)\2\1 corrisponder… ad acca,
o adda, o bcca, o bddb.
Notare che l'esempio dato sopra non Š una scorciatoia per
scrivere (a|b)(c|d)(c|d)(a|b). I retro-riferimenti non si
riferiscono alle ERE, ma a ci• che a esse viene fatto corrispondere.
I retro-riferimenti possono essere fatti all'interno di ERE annidate per retro-riferire
ERE annidate. Per esempio, frog|((a|bc)d\1) corrisponde a
frog, o ada, o bcdbc,
ma non a adbc.