Claudiogarau.it :: Tutorials & Scripts, PHP, Linux and more.

Home ~ Php :: Funzioni per le espressioni regolari: sintassi Perl compatibile :: Indice Php


Funzioni per le espressioni regolari: sintassi Perl compatibile

Categoria: Php Inserito il: 13-12-2005 Stampa (5637 click)

PHP è un linguaggio per lo scripting server side che presenta numerose affinità con il Perl, uno dei linguaggi di programmazione pił utilizzati; non stupisce quindi che le espressioni regolari in PHP possano essere utilizzate anche sfruttando una sintassi compatibile con il Perl (sintassi PCRE: Perl Compatible Regular Expressions).

Nello specifico presentiamo le sette funzioni di PHP riferite a questa tipologia di sintassi:

  • preg_grep(): genera una matrice degli elementi riconosciuti attraverso le espressioni regolari;
  • preg_match_all(): esegue un riconoscimento globale tramite le espressioni regolari;
  • preg_match(): esegue un riconoscimento con le espressioni regolari;
  • preg_quote(): inserisce il carattere per l'escape () nei caratteri delle espressioni regolari;
  • preg_replace(): esegue una ricerca ed una sostituzione attraverso le espressioni regolari;
  • preg_replace_callback(): esegue ricerche e sostituzioni tramite espressioni regolari utilizzando il callback;
  • preg_split(): suddivide una stringa utilizzando le espressioni regolari.
preg_grep() restituisce una matrice formata dagli elementi di un array testo che soddisfano i criteri stabiliti tramite le espressioni regolari:
<?
$array = array('mino', 'lino', 'pino', 'dino');
$array_preg = preg_grep("/pino/", $array);
print_r($array_preg);
?>
il risultato del nostro piccolo script sarà:
Array ([2] => pino)
La funzione preg_match_all() effettua una ricerca di tutte le espressioni regolari (globale) passate come parametro all'interno della stringa; gli elementi riconosciuti sono allocati all'interno di una matrice. Nell'esempio che segue abbiamo isolato tramite la funzione e le espressioni regolari tutti i valori numerici presenti un una stringa:
<?
$str = "I nani sono 7 e i fantastici 4,
le possibilità di diventare ricchi 1/10";
$str .= "e quelle di diventare miliardari 0.1-0.2 su 100";

$reg_exp = "`(d+s?[./-]?)+`";

preg_match_all($reg_exp,$str,$output);

$nb = count($output[0]);

for($i=0; $i<$nb; $i++)
{
echo $output[0][$i] . "<br/>";
}
?>
La funzione preg_match() esegue un riconoscimento nel parametro stringa utilizzando l'espressione regolare passata come criterio.
Un caso molto noto dell'utilizzo di questa funzione e quello della validazione di un'url:
<?
$url = "http://www.lukeonweb.net";

$reg_exp = "#^http://[a-z0-9-]+.([a-z0-9-]+.)?[a-z]+#i";

if (preg_match($reg_exp, $url))
{
echo "URL valida.";
}else{
echo "URL non valida.";
} ?>
preg_quote() svolge la funzione di inserire il carattere di escape backslash () davanti a ciascun carattere di una stringa che sia parte della sintassi di un'espressione regolare, possono così essere generate stringhe da utilizzare quali criteri di riconoscimento che contengano caratteri speciali per le espressioni regolari.
Nell'esempio proposto vedremo come la funzione intercetti il carattere speciale slash (/) passato come parametro insieme alla stringa su cui effettuare la ricerca:
<?
$str = "1/3 dello stipendio per l'affitto";
$str = preg_quote($str, "/");
echo $str;
?>
l'output ottenuto sarà il seguente:
1/3 dello stipendio per 

l'affitto
preg_replace() ricerca in una stringa i criteri stabiliti dall'espressione regolare, se individua una determinata sotto-stringa, la sostituisce con un sostituto.
E' possibile specificare un limite alle sostituzioni consentite, in assenza di un limite, o per un limite uguale a "-1", saranno effettuate tutte le sostituzioni possibili.
Ad esempio, nello script:
<?
$str = "Dicembre 25, 2005";
$exp = "/(w+) (d+), (d+)/i";
$exp2 = "${1}1,$3";
echo preg_replace($exp, $exp2, $str);
?>
l'output ("Dicembre1,2005") è dovuto all'azione su "$str" dei criteri stabiliti tramite espressione regolare.

preg_replace_callback() si comporta come preg_replace(), ma ha in pił il callback con cui si indica una funzione da richiamare a cui verrà passata una matrice con le sotto-stringhe riconosciute in una stringa, callback quindi restituisce la stringa da sostituire:
<?
$str = "lancia-fiamme";

function maiusc($array)
{
return ucfirst($array[1]) . '-' . ucfirst($array[2]);
}

echo preg_replace_callback("`([a-z]+)-([a-z]+)`", "maiusc", $str);
?>
Nelle'esempio abbiamo creato una piccola funzione in grado di rendere maiuscole le iniziali minuscole di sotto stringhe separate da un trattino; l'output sarà:
Lancia-Fiamme
preg_split() restituisce una matrice di parti di una stringa suddivise con criteri stabiliti nell'espressione regolare. Nel caso in cui venga specificato un limite, vengono restituite tante parti della stringa iniziale quante quelle indicate nel limite, -1 indica"nessun limite":
<?
$str = "Salmone";
$str_split = preg_split("//", $str, -1, PREG_SPLIT_NO_EMPTY);
print_r($str_split);
echo "<br/>" . $str_split[0];
?>
L'output del nostro script sarà:
Array ([0]=> S[1]=> a[2]=> l[3]=> m[4]=> o[5]=> n[6]=> e)
S
PREG_SPLIT_NO_EMPTY è un flag cioè un ulteriore parametro che può essere passato alla funzione, se viene specificato la funzione preg_split() restituisce parti di stringa non vuoti.


Per ulteriori approfondimenti su espressioni regolari, metacaratteri, funzioni e flags, rimandiamo il lettore alla consultazione del manuale ufficiale di PHP.

Attenzione: questo articolo è stato concesso in esclusiva per la pubblicazione a Mrwebmaster.it; ne è vietata la riproduzione, anche parziale, senza l'esplicito consenso dell'autore e della redazione di Mrwebmaster.it.

Cerca nel sito
Per sito
Sviluppatore di applicazioni Web con competenze evolute nella progettazione delle basi di dati, autore per alcune delle pił importanti testate on line dedicate alla manualistica tecnica (HTML.it, MrWebmaster.it, Edit) e consulente per l'e-learning.
Claudio Garau Twittter Claudio Garau Linkedin Claudio Garau Facebook Claudio Garau Google Plus
Tutte le categorie
Tutorial Random
Rinominare un computer da /etc/hosts
Quando installiamo Linux su un elaboratore, se il sistema non riceve istruzioni differenti, di default questo verrà chiamato:
localhost
Potrebbe naturalmente presentarsi... Leggi l'articolo
Corsi online per sviluppatori
Corsi per Webmaster, Web Designer, Programmatori, Grafici e Sistemisti