2011-11-16 9 views
21

Eventuali duplicati:
Converting ereg expressions to pregRisoluzione dei problemi "delimitatore non deve essere alfanumerico o backslash" l'errore quando si cambia ereg() per funzione preg_match()

<?php 
$searchtag = "google"; 
$link = "http://images.google.com/images?hl=de&q=$searchtag&btnG=Bilder-Suche&gbv=1"; 
$code = file_get_contents($link,'r'); 
ereg("imgurl=http://www.[A-Za-z0-9-]*.[A-Za-z]*[^.]*.[A-Za-z]*", $code, $img); 
ereg("http://(.*)", $img[0], $img_pic); 
echo '<img src="'.$img_pic[0].'" width="70" height="70">'; ?> 

e ottengo questo errore

Obsoleto: la funzione ereg() è deprecata in C: \ P rogram Files \ EasyPHP-5.3.8.1 \ www \ m \ img.php on line 5

Obsoleto: la funzione ereg() è deprecata in C: \ Programmi \ EasyPHP-5.3.8.1 \ www \ m \ img. funzioni php on line 6

preg_match() danno questo errore

Warning: preg_match() [function.preg-partita]: delimitatore non deve essere alfanumerico o barra rovesciata in C: \ Program Files \ EasyPHP-5.3.8.1 \ www \ m \ img.php sulla linea 6

Avvertenza: preg_match() [function.preg-match]: Del imiter non deve essere alfanumerico o barra rovesciata in C: \ Programmi \ EasyPHP-5.3.8.1 www \ m \ img.php on line 7

+0

La domanda collegata può rispondere alla sua domanda, ma come si fa che rendere le domande duplicati? –

risposta

45
  1. ereg è deprecato. Non usarlo
  2. Le funzioni preg sono tutte "espressioni regolari Perl", il che significa che è necessario avere una sorta di indicatore di inizio e fine sulla espressione regolare. Spesso questo sarà / o #, ma qualsiasi non alfanumerico andrà bene.

Per esempio, questo non funziona:

preg_match("/foo/u",$needle,$haystack); 
preg_match("#foo#i",$needle,$haystack); 
preg_match("@[email protected]",$needle,$haystack); 
preg_match("\$foo\$w",$needle,$haystack); // bad idea because `$` means something 
              // in regex but it is valid anyway 
              // also, they need to be escaped since 
              // I'm using " instead of ' 

Ma questo non lo farà:

preg_match("foo",$needle,$haystack); // no delimiter! 
+0

grazie per aver spiegato! – gordon33

+1

Quando provo preg_match ("/ foo/g", $ needle, $ haystack); Non funziona. Ho ricevuto un avvertimento PHP, modificatore sconosciuto 'g' – James

+0

Come per [questa risposta] (http://stackoverflow.com/a/3578703/1676444) su un'altra domanda, il modificatore di pattern '/ g' non funzionerà in PHP. Dovresti usare 'preg_match_all' invece nel tuo esempio. [Elenco dei modificatori di pattern per PHP] (http://php.net/manual/en/reference.pcre.pattern.modifiers.php) – Turnerj

3

Con preg_match() tua regex \ deve iniziare e terminare con un delimitatore come / con poche eccezioni (ad esempio aggiungendo "i" alla fine per caso-insensativo).

ad es.

preg_match('/[regex]/i', $string) 
+0

"Un delimitatore può essere qualsiasi carattere non alfanumerico, non backslash, non di spazio bianco." [Manuale] (http://www.php.net/manual/en/regexp.reference.delimiters.php). Ma sì, hai ragione, mancano i delimitatori. – lonesomeday

+0

Ah si. Grazie aggiornerò il mio post! –

Problemi correlati