2010-02-07 11 views
7

sto ottenendo il seguente messaggio per un po 'php devo usare, ma non ho scritto:Come sostituire ereg?

Deprecated: Function ereg() is deprecated in /opt/lampp/htdocs/webEchange/SiteWeb_V5/inc/html2fpdf.php on line 466 

Questa è la riga 466:

if(ereg('^([^=]*)=["\']?([^"\']*)["\']?$',$v,$a3)) 

Ho provato la semplice sostituzione con preg_match, ma couldn Riconosce il modificatore = nell'espressione regolare. Non sono ancora troppo bravo con le espressioni regolari e risolvere questo richiede che impari le esigenze regexp ereg E il regexp preg_match ha bisogno (che, se non sbaglio, è diverso) ... Potresti aiutarmi con questo?

Grazie

+0

Eventuali duplicati di [? Come posso convertire espressioni ereg a preg in PHP] (https://stackoverflow.com/questions/6270004/how-can-i-convert-ereg-expressions-to- preg-in-php) – Meloman

risposta

6

POSIX esteso le espressioni regolari (POSIX ERE, utilizzato da ereg) e espressioni regolari Perl-combatible (PCRE, utilizzato da preg_match) sono molto simile. Ad eccezione di some special POSIX expressions, PCRE è un superset di POSIX ERE.

Ciò significa che solo bisogno di mettere le espressioni regolari POSIX ERE in delimiters (qui /) e sfuggire ad ogni occorrenza di quel personaggio all'interno l'espressione regolare e si dispone di una valida PCRE espressione regolare:

/^([^=]*)=["']?([^"']*)["']?$/ 

Così :

preg_match('/^([^=]*)=["\']?([^"\']*)["\']?$/', $v, $a3) 
+0

Non proprio un superset (oltre alle classi di caratteri), ad es. corrispondenza '/ AB | ABC /' su 'ABCD' con ERE darà la corrispondenza più lunga (' ABC') ma PCRE darà la prima corrispondenza ('AB'). – kennytm

2

Prova:

if(preg_match('~^([^=]*)=["\']?([^"\']*)["\']?$~',$v,$a3)) 

La regex in preg_match deve essere racchiuso tra una coppia di delimitatori, che non è il caso con la funzione ereg() obsoleti.

0

la famiglia preg_ si aspetta che la regex sia delimitata. Invece di:

'^([^=]*)=["\']?([^"\']*)["\']?$' 

prova:

'/^([^=]*)=["\']?([^"\']*)["\']?$/'