fido.altervista.org

Espressioni Regolari - Metacaratteri - parte 1

I metacaratteri ^ e $

Tra i più semplici metacaratteri vi sono ^ e $ , che indicano una posizione.

^ rappresenta l'inizio di un testo in input, mentre $ ne rappresenta la fine.

Supponiamo di avere una linea di testo così:
sto scrivendo la mia storia in quel contesto

Se uso la regex ^sto trovo lo "sto" all'inizio della linea:
sto scrivendo la mia storia in quel contesto

Se uso la regex sto$ trovo lo "sto" alla fine della linea:
sto scrivendo la mia storia in quel contesto

Se invece uso la regex sto senza metacaratteri, trovo tutte le occorrenze di "sto":
sto scrivendo la mia storia in quel contesto

NB: Nelle varie applicazioni di solito c'è un'opzione che permette di tenere conto o no delle maiuscole: per esempio in PSPad è "MAIUSCOLE/minuscole", in Crimson Editor e in Dialog è "Match case", in NoteTab Light è "Case sensitive".
Quindi se nell'esempio precedente la frase fosse iniziata con "Sto" e avessimo selezionato questa opzione, la regex ^sto non avrebbe trovato un risultato corrispondente alla richiesta.

Un caso particolare è ^testo$: significa cercare una linea che inizia e finisce con testo, cioè una linea il cui unico contenuto è testo e nient'altro, né spazi, né punteggiatura.

Classe di caratteri: [ ]

Le parentesi quadre definiscono una classe di caratteri, cioè un elenco dei possibili caratteri che vogliamo includere nella ricerca, presi uno alla volta.
All'interno di una classe, l'ordine in cui compaiono i caratteri non ha alcuna importanza.

Chiariamo con un esempio: stiamo esaminando un codice HTML di una pagina web e vogliamo trovare tutti i tag dei titoli, cioè: <h1>, <h2>, <h3>, <h4>, <h5> e <h6>.
Una regex per realizzare questo è <h[123456]>, che tradotto significa: voglio cercare ogni <h1>, ogni <h2>, ... , ogni <h6> presente nel codice.

Ma non è l'unica regex possibile. Infatti per indicare un intervallo di valori possiamo usare il metacarattere trattino (o segno meno) - all'interno di [ ] .
La regex dell'esempio precedente allora diventa: <h[1-6]>, più breve da scrivere.

Altri esempi molto comuni con il metacarattere trattino sono:
[0-9]     per indicare le cifre da 0 a 9,
[a-z]     per indicare le lettere minuscole.

Si possono poi usare intervalli multipli:
[2-7L-P] è equivalente a [234567LMNOP].

Si possono combinare insieme intervalli e caratteri letterali:
[A-Z0-9!$] indica una qualunque lettera maiuscola, o una qualunque cifra, o un !, o un $. Si noti che un metacarattere (in questo esempio il $), quando si trova all'interno di una classe di caratteri, riassume il suo significato letterale.

E' da notare che se vogliamo includere il trattino tra i caratteri letterali da ricercare, possiamo farlo, a patto che non si possa confondere il 'trattino carattere letterale' con il 'trattino metacarattere' indicante un intervallo.
Per evitare ogni possibile fraintendimento basta dunque mettere il trattino subito dopo la parentesi quadra aperta o subito prima di quella chiusa, perché in queste posizioni non può più indicare un intervallo:
[-aeiou] oppure [aeiou-] sono due regex equivalenti che trovano ogni occorrenza del trattino o di una vocale.
Il trattino è considerato come metacarattere solo quando serve ad indicare un intervallo.

Stop! Svolgi gli esercizi del Gruppo 1

^ dentro [ ]

Abbiamo già visto il metacarattere ^. Esso prende un significato del tutto diverso se lo usiamo dentro una classe di caratteri subito dopo [ :
[^a-e] significa che si cerca qualunque carattere che non sia a, b, c, d oppure e.

^ subito dopo [ acquista dunque la funzione di negare tutto ciò che lo segue. Spesso è molto più comodo fare così piuttosto che elencare tutto quello che si vuole trovare.
Ad esempio la regex foto[^13579] cercherà "foto" seguito da un qualunque carattere che non sia un numero dispari.

NB: Se ^ si trova dentro il carattere di classe [ ], ma non esattamente dietro [, allora torna a non avere alcun significato particolare se non quello di un comune carattere letterale.
In generale dentro una classe di caratteri ogni metacarattere torna ad essere un carattere letterale, a meno che la sua posizione non indichi diversamente.

Il metacarattere . (punto)

A volte può capitare di dover cercare una sequenza di caratteri ma a prescindere da uno di essi: al posto di quel carattere, cioè, può esserci un qualunque altro carattere.
Il metacarattere . ha proprio questa funzione di "segnaposto".

Ad esempio la regex AB.C potrà trovare AB3C, ABUC, AB:C, ..., e persino AB C (anche lo spazio è un carattere!).

Il metacarattere . può essere ripetuto:
fe..o trova per esempio fermo, o fe2ho, o ferro, ...

NB: In molti software (anche in PSPad) il metacarattere . trova ogni carattere eccetto quello di nuova linea. Ciò può semplificare la scrittura delle regex, come vedremo in seguito.

Stop! Svolgi gli esercizi del Gruppo 2

torna su home avanti

Valid XHTML 1.0! indirizzo gmail Valid CSS 2!

© MLC 2003-2004