Informatica di base

I modificatori nelle regular expression

Autore

Manuel Ricci

In chiusura di un'espressione regolare possiamo trovare delle lettere. Quelli sono modificatori, la cui funzione è quella di modificare il comportamento dell’engine. Questo cambio ovviamente dipende dal tipo di lettera usata, noi ne vediamo alcune, ce ne sono un po’ di più, ma poterle utilizzare dipende strettamente dal tipo di linguaggio e di conseguenza engine che si sta utilizzando.

Modificatore globale

Il modificatore globale o /g fa in modo che l’engine non si fermi alla prima ricorrenza, ma che prosegua fino alla fine del testo.

Modificatore multilinea

Il modificatore multilinea o /m fa si che gli ancoraggi ^ e $ si ancorino all’inizio e alla fine della riga. Se non venisse specificato i due ancoraggi si comporterebbero esattamente con \A e \Z.

Modificatore di sensibilità

Suona strano, ma non è altro che il modificatore che si usa per evitare che l’espressione regolare faccia distinzione tra lettere minuscole e maiuscole. Viene indicato con la lettera /c.

Modalità prolissa

La mia modalità. Scherzi a parte è una modalità che possiamo specificare con la lettera /x e permette di ignorare testo e spazi dopo un # (cancelletto, hash, diesis, ma non hashtag).

Modalità a singola linea

La modalità a singola linea o /s fa in modo che il testo venga trattato come se fosse un’unica riga. In questa modalità, il carattere . (punto) che conosciamo per individuare tutti i caratteri ad esclusione di \n (fine riga), individua anche quest’ultimo.

Modalità UNICODE

Di default l’engine individua tutti i caratteri a 2 bytes, ma con la modalità UNICODE o /u estende la selezione anche a quelli da 4 bytes come simboli matematici ed emoji.

Modalità ungreedy

Già vista in passato, quando abbiamo parlato dei quantificatori nelle regular expression permette di rendere i quantificatori lazy/pigri (di default sono greedy/avari).

Nomi di gruppi di cattura duplicati

Questo premetto che non funziona ovunque, ma in sostanza con l’uso di /J possiamo fare in modo che i gruppi di cattura abbiano nomi identici, ciò significa che occuperanno lo stesso spazio di memoria e potranno essere usati insieme in fase di sostituzione.

Questo flag è disponibile solo in PHP, Delphi e R; o più in generale i linguaggi che usano PCRE (Perl Compatible Regular Expression) come engine.

Attivare e disattivare i modificatori delle regex

I modificatori solitamente si trovano alla fine di un’espressione regolare:

1/…regex…/modificatori

Se voglio usarne più di uno basta far seguire le varie lettere, in questo modo:

1/…regex…/gmi

Esiste però un altro modo per poter attivare e disattivare i modificatori e questo avviene nel bel mezzo dell’espressione stessa. La sintassi da usare è la seguente:

  • (?flag) per attivare il modificatore
  • (?-flag) per disattivare il modificatore

Ipotizziamo di volevo testare la stringa test, questa si può presentare in diverse forme, Test, tEst, ecc.

Le uniche varianti valide sono quelle con s ed t (quella finale) minuscole. Tutte le altre sono ok. Quindi possiamo scrivere un’espressione del genere:

1(?i)te(?-i)st

In questo modo soddisferemo la consegna. Anche in questa modalità possiamo usare più modificatori. Basterà far seguire, come al solito le varie lettere. Peculiarità però è che possiamo decidere di disattivarli in momenti diversi. Ad esempio (?ism)...(?i-sm) attiva in contemporanea insensitive, single line e multi line e disattiva solo quest’ultimi due, lasciando attivo insensitive.

Conclusioni

Con questo si conclude un altro percorso formativo offerto da Imparare Coding con Manuel.

Arrivati a questo punto le espressioni regolari non dovrebbero più sembrarti un incantesimo di magia nera, tutt’altro. Spero che il corso ti sia piaciuto.

Se hai 2 minuti vorrei sapere la tua opinione per poter migliorare la qualità in futuro. Il feedback è anonimo e per inviarmelo puoi compilare questo modulo Google. Grazie!

Al prossimo corso.

Caricamento...

Diventiamo amici di penna? ✒️

Iscriviti alla newsletter per ricevere una mail ogni paio di settimane con le ultime novità, gli ultimi approfondimenti e gli ultimi corsi gratuiti puubblicati. Ogni tanto potrei scrivere qualcosa di commerciale, ma solo se mi autorizzi, altrimenti non ti disturberò oltre.

Se non ti piace la newsletter ti ricordo la community su Discord, dove puoi chiedere aiuto, fare domande e condividere le tue esperienze (ma soprattutto scambiare due meme con me). Ti aspetto!

Ho in previsione di mandarti una newsletter ogni due settimane e una commerciale quando capita.