/ //

Utilizzare le espressioni regolari - GM Multimedia

Vai ai contenuti

Menu principale:

Utilizzare le espressioni regolari

Guida PHP



         Nella precedente lezione abbiamo visto cos'è un'espressione regolare e come verificare che una stringa sia determinata o meno da una regex. Analizziamo ora le altre funzioni che abbiamo a disposizione in PHP per sfruttare le potenzialità delle espressioni regolari.


preg_match
         Abbiamo visto la funzione preg_match nella scorsa lezione. Prima di procedere con le nuove funzioni, analizziamo un dettaglio appena accennato la scorsa volta: la possibilità di salvare i risultati della ricerca in un array. Prendiamo come esempio la seguente espressione regolare:

				/^(\d*)-(\d*)$/
         La regex è vera se la stringa è formata da due serie di numeri separati da un carattere -. E' una versione molto semplificata di un'espressione regolare utilizzata per determinare un numero di telefono italiano valido. Stringhe come le seguenti sono quindi valide:
				340-12345678
				02-12312322
				0775-1231233
         Supponiamo che dato un numero di telefono si abbia l'esigenza di separare il prefisso dal numero. Possiamo usare la funzione in questo modo:
				$pattern = "/^(\d*)-(\d*)$/";
				preg_match($pattern, '340-8652066', $result);
				$prefisso = $result[1];
				$numero = $result[2];
         Come possiamo vedere abbiamo usato un terzo parametro chiamato $result per recuperare le informazioni relative al prefisso ed al numero. Questo perché il terzo parametro conterrà i risultati della ricerca. In particolare $result[0] contiene tutta la stringa che corrisponde al pattern utilizzato, a seguire andranno tutti i criteri contenuti nel pattern: nel nostro caso il primo ed il secondo (\d*).


preg_match_all
         La funzione preg_match_all è un'estensione della precedente con la differenza che restituisce tutte le occorrenze che corrispondono al pattern utilizzato. Supponiamo di avere una stringa che contiene diversi numeri di telefono che vogliamo salvare in un array:

				$stringa = 'Ufficio: 0452-222222 Cellulare: 300-0000000 Casa: 0775-12312123';
				$pattern = '/(\d*)-(\d*)/';
				preg_match_all($pattern, $stringa, $result);
				$numeri = $result[0];
				var_dump($numeri);
				
				//Il var_dump ci restituirà qualcosa di simile a:
				
				array(3) {
				  [0]=>
				  string(11) "0452-222222"
				  [1]=>
				  string(11) "300-0000000"
				  [2]=>
				  string(10) "0775-12312123"
				}
         Ovviamente se provassimo a stampare $result[1] o $result[2] conterranno altri array con il match dei singoli criteri.


preg_replace
         Un'altra funzione molto utile è la funzione preg_replace con la quale possiamo sostituire le occorrenze di un'espressione regolare con un'altra stringa. La funzione prende in ingresso quattro parametri:

PARAMETRODESCRIZIONE
$pattern
Pattern di ricerca.
$replacement
La stringa che verrà sostituita.
$subject
Stringa da sostituire.
$limit
Limite delle sostituzioni da effettuare (opzionale).
         Data la stringa con i numeri di telefono che abbiamo visto nell'esempio precedente, supponiamo di voler nascondere i numeri di telefono sostituendoli con degli asterischi:
         Data la stringa con i numeri di telefono che abbiamo visto nell'esempio precedente, supponiamo di voler nascondere i numeri di telefono sostituendoli con degli asterischi:
				$stringa = 'Ufficio: 0452-222222 Cellulare: 300-0000000 Casa: 0775-12312123';
				$pattern = '/(\d*)-(\d*)/';
				$stringa = preg_replace($pattern, '******', $stringa);
				echo $stringa;
				//Stamperà:
				//Ufficio: ****** Cellulare: ****** Casa: ******


preg_replace_callback
         La funzione preg_replace_callback si occupa anch'essa di effettuare delle sostituzioni con la differenza che prende in ingresso una funzione di callback per effettuarle.
PARAMETRODESCRIZIONE
$pattern
Pattern di ricerca.
$callback
Funzione di callback.
$subject
Stringa da sostituire.
$limit
Limite delle sostituzioni da effettuare (opzionale).
         La funzione di callback prenderà in ingresso un array $matches che contiene i risultati di ricerca come nella preg_match vista in precedenza. Supponiamo di voler trasformare una URL di YouTube nel suo codice di embed per mostrarlo all'interno di una pagina. Nel nostro caso la funzione preg_replace_callback ci viene in soccorso trasformando l'indirizzo:
				$youtubeUrl = 'https://www.youtube.com/watch?v=1cQh1ccqu8M';
				$youtubePattern = "/\s*[a-zA-Z\/\/:\.]*youtu(be.com\/watch\?v=|.be\/)([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i";
				function youtubeEmbedCallback($matches) {
				    if (!isset($matches[2])) {
				        return '';
				    }
				    $videoId = $matches[2];
				    return '';
				}
				$youtubeEmbed = preg_replace_callback($youtubePattern, "youtubeEmbedCallback", $youtubeUrl);
				echo $youtubeEmbed;
				//Stamperà:
				//
         Nel codice che abbiamo appena visto abbiamo utilizzato la funzione youtubeEmbedCallback per effettuare le sostituzioni. Al suo interno troviamo un'espressione regolare un po' complessa che ci consente di recuperare tutte le differenti tipologie di link di YouTube. Data l'espressione regolare, attraverso preg_replace_callback sostituiamo il link di YouTube con un codice HTML che possiamo inserire all'interno delle nostre pagine Web.
Visitatori online:
Sei il nostro visitatore n°:
© - Copyright 2015. - Tutti i diritti riservati - G.M. Multimedia
Torna ai contenuti | Torna al menu