PHP  »  Articoli  »  Programmazione Php 

PHP abbandona le funzioni ereg: le alternative

di: Claudio Garau     12 Marzo 2010

Passare dalle funzioni POSIX alle PCRE

Il metodo più veloce, ma anche quello più sconsigliabile per evitare errori dovuti all'utilizzo di funzioni POSIX è quello molto semplice di disabilitare la voce E_DEPRECATED nella direttiva ERROR_REPORTING del file di configurazione di PHP, php.ini; una procedura del genere può aiutare nel caso in cui si debba installare uno script datato ma deve essere considerata come un rimedio momentaneo; del resto passare dall'utilizzo delle funzioni POSIX alle PCRE non è particolarmente complesso, la sintassi prevista per la seconda è leggermente più complessa ma prevede delle regole di facile comprensione.

Si pensi per esempio alla funzione POSIX ereg(), essa viene utilizzata per effettuare riconoscimenti di espressioni regolari, la sua sintassi classica è la seguente:

ereg('pattern', 'stringa');

dove "pattern" è l'espressione regolare da utilizzare e "stringa" è la variabile o il testo su cui effettuare il confronto; al posto di ereg() è invece possibile utilizzare preg_match(), una funzione PCRE che svolge lo stesso compito. Si noti bene però che per utilizzare la seconda al posto della prima non è sufficiente una semplice sostituzione, non sarà quindi possibile correggere il codice proposto in precedenza come segue:

preg_match('pattern', 'stringa');

La sintassi delle espressioni regolari in preg_match() prevede infatti dei delimitatori, gli slash ("/"), quindi una conversione corretta prevede la seguente sintassi:

preg_match('/pattern/', 'stringa');

Il delimitatore di chiusura dovrà essere indicato dopo il pattern e non dovrà essere inserito all'interno di esso, diversamente il confronto con la stringa avverrà soltanto tramite la porzione di pattern compresa tra i primi due delimitatori; se comunque si ha la necessità di introdurre degli slash all'interno dei propri pattern, questi dovranno essere sottoposti ad escape tramite backslash ("\"), l'esecuzione manuale di questa procedura potrà comunque essere evitata utilizzando l'apposita funzione addcslashes() che si occuperà automaticamente del quoting tramite backslash del pattern.

Si analizzi il seguente esempio:

$pattern = '/<li>.+</li>/';

Il pattern proposto non rispetta la corretta sintassi prevista per le espressioni regolari con la funzione preg_match() in quanto lo slash presente nel tag di chiusura "</li>" viene confuso con un delimitatore del pattern; in questo caso l'escape manuale potrebbe avvenire nel modo seguente:

$pattern = '/<li>.+<\/li>/';

Ora, grazie al backslash posto davanti allo slash del tag di chiusura, è possibile determinare l'escape di quest'ultimo che non delimiterà più il pattern; lo stesso risultato può essere ottenuto grazie all'azione di addcslashes() che sostituisce la procedura manuale di escape:

$pattern = '<li>.+</li>';
$escaped_pattern = addcslashes($pattern, '/');

Chi ha utilizzato le funzioni POSIX sa che per alcune di esse è disponibile una variante case insensitive in grado di operare dei confronti non tenendo conto della presenza di lettere maiuscole o minuscole; nel caso di ereg(), la sua variante case in sensitive è eregi() che utilizza la stessa sintassi:

eregi('pattern', 'stringa');

Le funzioni PCRE non prevedono invece una variante case in sensitive, ma consentono comunque di ignorare la differenza tra maiuscole e minuscole grazie ad un semplice carattere, la "i" abbreviazione di insensitive, da inserire immediatamente dopo il delimitatore di chiusura del pattern:

preg_match('/pattern/i', 'stringa');

Guide PHP

Guida Yii Framework

Come creare applicazioni Web in modo semplice e veloce con il...

Guida Zend Framework

Diventate professionisti dello sviluppo Web. Zend Framework è lo...

Guida Applicazioni Facebook con PHP

Come realizzare un'applicazione per Facebook. Dalle basi della...

Altre guide

Newsletter @PHP

Ogni lunedì, direttamente nella tua e-mail: script, articoli, guide e tutorial su PHP, MySQL e Apache.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso PHP per Webmaster

11 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

25 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

05 Giugno 2012 a Roma
Disponibilità: 7 Posti