Se avete fatto l’aggiornamento a PHP 5.3, ci sono alte probabilità che ci saranno alcuni avvisi o messaggi di funzioni deprecate, in alcuni casi ferma totalmente lo script.
Un esempio è la famiglia di funzioni ereg, che sono stati prese per buone per tanto tempo, anche se erano più lente e ci si sentiva meno familiare all’alternativa compatibile con famiglia preg di Perl.

Fix ereg
Con il rilascio della versione 5.3 di PHP le funzioni per le espressioni regolari POSIX sono state dichiarate deprecate. Passerà del tempo prima gli hosting utilizzeranno definitivamente tale versione, ma è bene conoscerle.
PCRE (Perl-Compatible Regular Expressions) si presenta come standard per le espressioni regolari in alternativa all’utilizzo delle storiche POSIX, utile spesso in ambito di sviluppo WEB per sostituire URL, mostrare porzioni di testo ecc.
Ecco la corrispondenza di tutte le vecchie funzioni PHP deprecate e le sostitutive:

POSIX PCRE
ereg_replace() preg_replace()
ereg() preg_match()
eregi_replace() preg_replace()
eregi() preg_match()
split() preg_split()
spliti() preg_split()
sql_regcase() nessuna corrisp.
 
Per eseguire la migrazione ereg():
#
$this->file_name = ereg('\.([^\.]*$)', $this->file_name, $extension);
#

Diventa:

#
$this->file_name = preg_match('/\.([^\.]*$)/', $this->file_name, $extension);
#
Si noti che ho avvolto il modello (\.([^\.]*$)) con l'intorno / /, che sono i delimitatori RegExp. Se nella stringa ci sono parecchie slash / (ad esempio un URL), è possibile utilizzare, come alternativa, il delimitatore #.
Per eseguire la migrazione ereg_replace()
#
$this->file_name_body = ereg_replace('[^A-Za-z0-9_]', '', $this->file_name_body);
#
Diventa:
#
$this->file_name_body = preg_replace('/[^A-Za-z0-9_]/', '', $this->file_name_body);
#
Ancora una volta, ho solo aggiunto i delimitatori al modello.
Se si utilizzano le funzioni di eregi (che sono il case-insensitive della versione di ereg), noterete che non ci sono funzioni equivalenti pregi. Questo perché questa funzionalità è gestita dai modificatori RegExp.
Fondamentalmente, per rendere ii modello di caratteri corrispondente ad un case-insensitive si dovrà aggiungere la 'i' dopo il delimitatore finale:
Per eseguire la migrazione eregi()
#
$this->file_name = eregi('\.([^\.]*$)', $this->file_name, $extension);
#
Diventa:
#
$this->file_name = preg_match('/\.([^\.]*$)/i', $this->file_name, $extension);
#
Un'altra funzione deprecata è split(). Anche in questo caso avvolgeremo il modello con dei delimitatori
Per eseguire la migrazione split()
#
list($anno, $mese, $giorno, $ora, $min, $sec) = split( '[: -]', $post_timestamp );
#
Diventa:
#
list($anno, $mese, $giorno, $ora, $min, $sec) = preg_split('/[: -]/', $post_timestamp);
#
Per concludere aggiungo tutte le corrispondenze: 

POSIX Perl ASCII Descrizione
[:alnum:] [A-Za-z0-9] caratteri alfanumerici
[:word:] \w [A-Za-z0-9_] caratteri alfanumerici incluso l’underscore “_” (=word)
\W [^\w] carattere non-word
[:alpha:] [A-Za-z] carattere alfabetico
[:blank:] [ \t] spazio e tab
[:cntrl:] [\x00-\x1F\x7F] caratteri di controllo
[:digit:] \d [0-9] cifre
\D [^\d] non-cifre
[:graph:] [\x21-\x7E] caratteri visibili
[:lower:] [a-z] caratteri minuscoli
[:print:] [\x20-\x7E] caratteri visibili e spazi
[:punct:] [-!"#$%&'()*+,./:;<=>?@[\\\]^_`{|}~] caratteri di punteggiatura
[:space:] \s [ \t\r\n\v\f] caratteri di spaziatura del testo
\S [^\s] caratteri diversi da quelli di spaziatura del testo
[:upper:] [A-Z] lettere maiuscole
[:xdigit:] [A-Fa-f0-9] cifre esadecimali