W3docs

Espressioni Regolari PHP

Scopri come usare le espressioni regolari in PHP per validare input, cercare testo ed estrarre dati con le funzioni preg_.

Un'espressione regolare (regex) è un pattern che descrive un insieme di stringhe. In PHP, le espressioni regolari permettono di cercare testo, validare input, estrarre dati e trasformare stringhe con molto meno codice rispetto alla logica manuale carattere per carattere. Questo capitolo tratta la sintassi, le funzioni preg_ e le tecniche avanzate più utili, con esempi eseguibili per ciascuna.

Cosa sono le Espressioni Regolari

Un'espressione regolare è una sequenza di caratteri che definisce un pattern di ricerca. Invece di corrispondere a una stringa fissa, un pattern può descrivere un'intera famiglia di stringhe — "qualsiasi cifra", "una o più lettere", "una stringa a forma di email", e così via. Questo rende le regex ideali per:

  • Validare l'input dell'utente (email, numeri di telefono, codici postali).
  • Cercare sottostringhe che seguono una forma piuttosto che un valore esatto.
  • Estrarre dati — recuperare numeri d'ordine, date o URL da testo libero.
  • Sostituire e dividere testo in base a un pattern.

PHP usa PCRE (Perl-Compatible Regular Expressions), quindi la sintassi del pattern è la stessa di Perl, JavaScript e della maggior parte degli altri linguaggi moderni.

Come Funzionano le Espressioni Regolari in PHP

In PHP, le espressioni regolari sono gestite dalla famiglia di funzioni preg_. Ognuna accetta un pattern come primo argomento ed esegue un'operazione diversa.

Funzioni preg_ comuni

FunzioneDescrizione
preg_match()Cerca la prima corrispondenza. Restituisce 1 in caso di corrispondenza, 0 in assenza di corrispondenza, false in caso di errore
preg_match_all()Trova tutte le corrispondenze. Restituisce il numero di corrispondenze complete trovate
preg_replace()Sostituisce ogni corrispondenza con una stringa di sostituzione
preg_split()Divide una stringa in un array usando il pattern come delimitatore
preg_quote()Effettua l'escape dei caratteri con significato speciale in un pattern

Un errore comune: preg_match() restituisce 0 (falsy) per nessuna corrispondenza e false per un errore (come un pattern malformato). Usa l'operatore === quando devi distinguere questi due casi.

Le Basi delle Espressioni Regolari PHP

Un pattern PHP è una stringa con il corpo del pattern racchiuso tra delimitatori (comunemente /), seguito opzionalmente da modificatori:

Sintassi delle espressioni regolari PHP

/pattern/modifiers

Dove pattern è la sequenza di caratteri da abbinare, e modifiers sono lettere opzionali che modificano il comportamento del pattern. I modificatori più comunemente usati in PHP sono:

  • i: Corrispondenza senza distinzione tra maiuscole e minuscole (/php/i corrisponde a PHP, Php, php).
  • m: Modalità multilinea — ^ e $ corrispondono all'inizio/fine di ogni riga, non solo dell'intera stringa.
  • s: Modalità "dotall" — . corrisponde anche ai caratteri di nuova riga.
  • u: Tratta il pattern e il soggetto come UTF-8. Usalo ogni volta che il testo può contenere caratteri non ASCII.

Elementi fondamentali comuni dei pattern

All'interno del pattern stesso, una manciata di metacaratteri svolge la maggior parte del lavoro:

TokenSignificato
\d \w \sUna cifra, un carattere parola, un carattere spazio
.Qualsiasi singolo carattere (eccetto nuova riga, a meno che non sia impostato s)
+ * ?Uno-o-più, zero-o-più, zero-o-uno del token precedente
{2,4}Tra 2 e 4 ripetizioni
^ $Inizio e fine della stringa (o riga in modalità m)
[abc]Una classe di caratteri — uno qualsiasi tra a, b, o c
(...)Un gruppo di cattura
|Alternanza — corrisponde al pattern su entrambi i lati

Espressione regolare PHP per sostituire testo

php— editable, runs on the server

Usare le Espressioni Regolari PHP per Validare l'Input dell'Utente

Uno degli usi più comuni delle espressioni regolari in PHP è la validazione dell'input dell'utente. Ad esempio, puoi usare un'espressione regolare per assicurarti che un indirizzo email inserito dall'utente sia nel formato corretto. Il seguente codice mostra come farlo:

Espressione regolare PHP per verificare che un indirizzo email inserito dall'utente sia nel formato corretto

php— editable, runs on the server

Nota: Sebbene questa regex funzioni per la validazione di base, PHP fornisce la funzione integrata filter_var($email, FILTER_VALIDATE_EMAIL) per una validazione email più robusta e conforme all'RFC. Per i flussi di lavoro completi dei moduli, consulta PHP Form Validation.

Trovare Tutte le Corrispondenze

Mentre preg_match() si ferma alla prima corrispondenza, preg_match_all() raccoglie ogni corrispondenza in un array. Questo è lo strumento per estrarre dati ripetuti, come ogni parola, numero o tag in una stringa.

Estrarre ogni numero da una stringa

<?php

$text = "Room 12, floor 3, building 7";
$count = preg_match_all("/\d+/", $text, $matches);

echo $count;                    // Outputs: 3
print_r($matches[0]);           // Outputs: Array ( [0] => 12 [1] => 3 [2] => 7 )

?>

Dividere le Stringhe

preg_split() suddivide una stringa in un array usando un pattern come delimitatore. A differenza di explode(), il delimitatore può variare — qui dividiamo su qualsiasi sequenza di virgole e spazi:

<?php

$csv = "apple, banana,  cherry";
$fruits = preg_split("/[\s,]+/", $csv);

print_r($fruits);
// Outputs: Array ( [0] => apple [1] => banana [2] => cherry )

?>

Tecniche Avanzate per le Espressioni Regolari PHP

Una volta che le basi sono ben assimilate, queste tecniche ti permettono di scrivere pattern espressivi e precisi.

Gruppi di cattura

Le parentesi (...) catturano parte di una corrispondenza in modo da poterla leggere dall'array $matches. L'indice 0 contiene l'intera corrispondenza; l'indice 1 e successivi contengono ciascun gruppo.

php— editable, runs on the server

Gruppi con nome

(?<name>...) assegna a un gruppo un'etichetta leggibile, così puoi estrarre i valori per nome invece che per indice numerico — molto più chiaro per date, prezzi e altri dati strutturati.

<?php

$date = "2023-10-01";
preg_match("/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/", $date, $m);

echo $m["year"];   // Outputs: 2023
echo $m["month"];  // Outputs: 10

?>

Alternanza

L'operatore | corrisponde a un pattern o a un altro. L'esempio seguente corrisponde all'animale che appare per primo:

<?php

preg_match("/cat|dog|bird/", "I love cats", $m);
echo $m[0]; // Outputs: cat

?>

Altri elementi fondamentali

  • Gruppi non di cattura(?:...) raggruppano i token insieme (ad esempio, per applicare un quantificatore) senza memorizzare la corrispondenza, il che mantiene pulito l'array $matches.
  • Lookahead / lookbehind(?=...), (?!...), (?<=...), (?<!...) effettuano la corrispondenza in base a ciò che viene prima o dopo una posizione senza consumarla.
  • Quantificatori{n}, {n,}, e {n,m} corrispondono a un conteggio esatto o a un intervallo di ripetizioni, ad es. \d{4} per esattamente quattro cifre.

Quando hai bisogno di abbinare testo fornito dall'utente letteralmente all'interno di un pattern, eseguilo attraverso preg_quote() prima, in modo che caratteri come . o * vengano sottoposti a escape invece di essere trattati come metacaratteri.

Argomenti Correlati

Conclusione

Le espressioni regolari PHP sono uno strumento potente che può aiutarti a svolgere un'ampia gamma di attività. Che tu stia validando l'input dell'utente, cercando nel testo o eseguendo manipolazioni complesse di stringhe, le espressioni regolari sono una parte essenziale del toolkit dello sviluppatore PHP.

Practice

Pratica
Quali sono gli usi delle Espressioni Regolari in PHP come indicato nell'articolo collegato?
Quali sono gli usi delle Espressioni Regolari in PHP come indicato nell'articolo collegato?
Was this page helpful?