/ //

I gruppi - GM Multimedia

Vai ai contenuti

Menu principale:

I gruppi

I gruppi vengono racchiusi dalle parentesi tonde e diventano essenziali nel momento della sostituzione, poiché è possibile richiamarli. Un esempio per chiarire tutto:
				$testo = "Questo è una data formato mysql: 2010-01-28";
				$testo = preg_replace('/(\d{4})-(\d{2})-(\d{2})/', 'Questa è una data in formato europeo: $3/$2/$1', $testo);
				// ora $testo sarà "Questa è una data in formato europeo: 28/01/2010"
Come vedete l’espressione contiene tre gruppi e nella sostituzione compaiono dei dollari seguiti da un numero: questo numero rappresenta il testo trovato dal gruppo corrispondente. Così $1 identificherà il primo gruppo, $2 il secondo e così via.

Per essere fiscali è possibile utilizzare \1 e \2 invece che $1 e $2, ma ve lo sconsiglio in quanto le barre dentro una stringa devono essere precedute da un’altra barra e questo rende tutto meno leggibile
				$testo = "Questo è una data formato mysql: 2010-01-28";
				$testo = preg_replace('/(\d{4})-(\d{2})-(\d{2})/', 'Questa è una data in formato europeo: \\3/\\2/\\1', $testo);
				// ora $testo sarà "Questa è una data in formato europeo: 28/01/2010"
Nei gruppi inoltre è possibile aggiungere un’espressione logica “OR”, cioè poter ricercare una serie di caratteri oppure un’altra
				$testo = "Si dice ha piovuto o è piovuto in italiano?";
				$testo = preg_replace('/\s+((ha|è)\s+piovuto)\s+/', ' è nevicato ', $testo);
				// L'espressione cercherà "ha piovuto" oppure "è piovuto" seguiti o preceduti da spazi;
				// $testo ora sarà "Si dice è nevicato o è nevicato in italiano?"
Questa funzione ritornerà sia “ha piovuto” che “è piovuto“. Ma fate attenzione , poiché anche in questo caso le parentesi tonde rappresentano un gruppo e quindi verrà considerato nelle variabili di sostituzione, in questo caso $1 conterrà “ha piovuto” o “è piovuto” e $2 “ha” o “è”.
Qui non sempra un problema, ma nelle espressioni più complesse ricercare cose non necessarie complica orrendamente le cose. Come fare allora? Basta utilizzare i gruppi passivi, aggiungendo un “?:” subito dopo la parentesi tonda aperta:
				$testo = "Si dice ha piovuto o è piovuto in italiano?";
				$testo = preg_replace('/\s+((?:ha|è)\s+piovuto)\s+/', ' è nevicato ', $testo);
				// L'espressione cercherà "ha piovuto" oppure "è piovuto" seguiti o preceduti da spazi;
				// $testo ora sarà "Si dice è nevicato o è nevicato in italiano?"
Se analizzate il risultato ora conterrà solamente “ha piovuto” e “è piovuto”
Torna ai contenuti | Torna al menu