Vai al contenuto principale

Set di caratteri nelle espressioni regolari

Se vogliamo selezionare una serie di caratteri con un'espressione regolare possiamo usare le parentesi quadre, ma ci sono un paio di regole da seguire.

Approfondiamo finalmente una coppia di caratteri speciali già visti nelle lezioni precedenti. La coppia di parentesi quadre [ ]. La sintassi viene usata per definire un set di caratteri ed è estremamente semplice da usare.

Ipotizziamo di avere una serie di file:

  • file_1.txt
  • file_2.txt
  • file_3.txt
  • file_a.txt
  • file_b.txt
  • file_c.txt

Qualora volessimo individuare tutti i file che hanno una lettera dopo l’underscore, potremmo scrivere:

file_[abc]\.txt

Semplice no?

Con lo stesso sistema possiamo individuare anche quelle parole che iniziano con una lettera maiuscola o minuscola:

\b[mM]\w+\b

L’avete capita al volo? Se sì, sono contento per voi. Se no, la spiego:

  • \b l’abbiamo visto nelle lezioni precedenti ed è un ancoraggio che indica il “bordo” di una parola
  • [mM] è il nostro set di caratteri per individuare una lettera m maiuscola o minuscola all’inizio di un parola (essendo dopo \b può essere solo all’inizio)
  • \w individua lettere, numeri e underscore (quindi le lettere successive alla lettera che ho indicato prima)
  • + è il quantificatore che indica una o infine ricorrenze di \w

La sequenza di caratteri

Se volessimo cercare una sequenza di caratteri possiamo avvalerci del -. Dall’esempio precedente al posto di [mM] possiamo scrivere [a-zA-Z] questo significa che individuerà tutte le lettere minuscole o maiuscole.

Se invece stessimo cercando dei numeri possiamo scrivere [0-9].

Occhio all’ordine

Attenzione però a non scrivere [z-a] o [9-0], perché in quel caso si verificherà un errore dato che i caratteri prima e dopo il trattino devono essere in ordine crescere di codice ASCII.

Allora magari starete pensando perché non possiamo scrivere [A-z]? Perché se date un’occhiata alla tabella ASCII noterete che A-Z e a-z non sono contigui, dopo la Z ci sono dei simboli. Quindi verrebbero presi in considerazione anche loro nell’eventualità.

Altra piccola curiosità [0-9] è l’equivalente di \d, visto nelle lezioni precedenti e meglio discusso nella lezione sulle cifre e gli spazi

Attenzione al trattino

Il trattino nei set possiamo definirlo quasi un carattere speciale. Nella lezione precedente quando abbiamo individuato le date, abbiamo usato senza problemi il trattino perché si trovava agli estremi del set (dopo o prima della parentesi quadra). Se steste cercando il trattino e lo collocaste in mezzo al set dovete ricordarvi di fare l’escape con il \.

Escludere dei caratteri

Se volessimo escludere dei caratteri dal set possiamo usare subito dopo [ l’apice ^ in questo modo:

[^abc]
[^123]

L’apice indica la negazione all’interno di un set e possiamo dichiarare piú negazioni separandole con la virgola in questo modo:

[^a-z, 0-9]

E se voleste trovare ^, semplice… basta non metterlo all’inizio del set.

Se prendiamo in esame l’espressione regolare di prima \b[mM]\w+\b come potremmo modificarla affinché cerchi tutte le parole di una frase senza badare a quale sia la lettera iniziale, ma assicurandosi che non vengano presi in considerazioni simboli, spazi, numeri e underscore?

\b[^\W\s\d_]+\b

Spiego ciò che c’è di nuovo (tutto a parte \b e il quantificatore +:

  • [...] set di caratteri
  • ^ negazione, quindi tutto quello che segue non deve essere individuato
  • \W tutti i simboli (contrario di \w che individua lettere, numeri e underscore)
  • \s spazi
  • \d numeri
  • _ undescore

Diventano sempre più difficili, ma anche più semplici da leggere.

Un paio di esercizi sulle espressioni regolari

Dati questi numeri:

  • 01001001 01000011 01000011 01001101

  • 0x49 0x43 0x43 0x4d

  • Individuare i valori binari con l’uso dei set di caratteri

  • Individuare i valori esadecimali con l’uso dei set di caratteri

  • Bonus: scoprire cosa significa il codice binario.

Per quanto riguarda i numeri binari è semplice possiamo scrivere:

[0-1]{8}

E il gioco è fatto

Per gli esadecimali:

0x[0-9a-f][0-9a-f]

Oppure

0x[0-9a-f]{2}

Il bonus lo lascio a voi :)

Conclusioni

Abbiamo quindi approfondito il set di caratteri nella prossima lezione vedremo nel dettaglio un paio di ancoraggi $ e ^.

Unisciti a WebTea

Niente spam. Solo contenuti formativi su Software Engineering.

Ci sono due cose che non ci piacciono: lo spam e il mancato rispetto della privacy. Seleziona come vuoi restare in contatto:

Preferenze di contatto

Usiamo Mailchimp come piattaforma di marketing. Cliccando su iscriviti, accetti la nostra privacy policy e che le tue informazioni vengano trasferite a Mailchimp per l'elaborazione. Termini e Privacy. Puoi disiscriverti in qualsiasi momento.