Le espressioni regolari PHP sono delle stringhe che descrivono un criterio di ricerca che si utilizza per trovare tutte le occorrenze di una stringa all’interno di un testo.

Le espressioni regolari PHP permettono non solo di cercare una stringa specifica ma anche di trovare più risultati in base a un criterio più complesso. Ad esempio possiamo cercare tutte le parole scritte in maiuscolo, oppure tutte le parole che iniziano per una lettera specifica.

E’ anche possibile, tramite le espressioni regolari, validare una stringa, per verificare che questa sia conforme a un determinato pattern. Ad esempio sappiamo che un indirizzo e-mail può contenere lettere minuscole, numeri, underscore, dash e punti seguiti sicuramente dal simbolo @ e di nuovo lettere minuscole, underscore, dash e almeno un punto.

/^([a-z0-9_.-]+)@([a-z0-9.-]+)\.([a-z.]{2,6})$/

Questo è il pattern che descrive la sintassi di un indirizzo email. Suddividiamo questo pattern per vedere cosa significa ogni parte di esso.

/

Lo slash indica l’inizio e la fine dell’espressione regolare.

^

Inizio della parola. Ci si aspetta che prima non ci sia niente, o uno spazio.

([a-z0-9_.-]+)@

Le parentesi quadre racchiudono un set di caratteri, in questo caso appunto tutte le lettere minuscole da a a z, tutti i numeri da 0 a 9, gli underscore i punti e i dash -. Il simbolo + dopo la parentesi quadra indica che devono esistere almeno uno o più caratteri indicati nel pattern. Infine dichiariamo che ci aspettiamo il simbolo @.

In un indirizzo email dopo il carattere @ ci aspettiamo di trovare un nome di dominio:

([a-z0-9.-]+)\.([a-z.]{2,6})

Quindi di nuovo un gruppo di lettere, numeri, punti e dash ([a-z0-9.-]+) seguiti da un punto \. e un gruppo di lettere e/o punti di una lunghezza specifica, cioè tra 2 e 6: ([a-z.]{2,6}).

Da notare che quando ci aspettiamo il punto prima dell’estensione del nome di dominio, lo precediamo con il carattere di escape \ . Facciamo questo perché il punto è utilizzato come wildcard nelle espressioni regolari per descrivere un carattere qualsiasi, perciò se vogliamo dichiarare che ci aspettiamo proprio il punto, dobbiamo usare il carattere di escape prima.

$

Fine della parola. ci si aspetta che dopo ci sia uno spazio o nient’altro.

Vediamo alcuni altri esempi delle espressioni regolari più comuni.

// un username tra 3 e 16 caratteri di lunghezza
/^[a-z0-9_-]{3,16}$/

// una password senza caratteri speciali
/^[a-zA-Z0-9_-]{6,18}$/

// una url
/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/

// un indirizzo ip
/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/

// un tag HTML
/^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/

Corsi in aula e da remoto: Laravel, PHP e JavaScript

Come utilizzare le espressioni regolari PHP

Ecco due delle funzioni PHP più comunemente usate con le espressioni regolari: preg_match e preg_replace.

preg_match

preg_match ( string $pattern , string $subject [, array &$matches ])

Questa funzione restituisce 1 o 0 se il pattern viene trovato all’interno dell’ambito di ricerca $subject. Facoltativamente è possibile definire il terzo argomento $matches: un array che conterrà tutti i risultati di corrispondenza con il pattern trovato all’interno del testo.

preg_replace

preg_replace ( mixed $pattern , mixed $replacement , mixed $subject )

Come il nome suggerisce, preg_replace sostituisce tutte le occorrenze del pattern in un testo con una stringa che passiamo come secondo argomento.

Necessiti di un ripasso dedicato alle espressioni regolari? Dai un’occhiata alla possibilità di acquistare i nostri mini pacchetti inerenti alle lezioni private PHP, 3 – 4 ore su Skype e via, rientri subito in carreggiata! 🙂