2011-11-16 15 views
21

Duplicar posibles:
Converting ereg expressions to pregSolución de problemas "Delimitador no debe ser alfanumérico ni la barra invertida" error al cambiar ereg() para 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">'; ?> 

y me sale este error

Obsoleto: La función ereg() está en desuso en C: \ P rogram Files \ EasyPHP-5.3.8.1 \ www \ m \ img.php en la línea 5

Obsoleto: La función ereg() está en desuso en C: \ Program Files \ EasyPHP-5.3.8.1 \ www \ m \ img. php en la línea 6

preg_match() funciones dan a este error

Advertencia: preg_match() [function.preg-fósforo]: Delimitador no debe ser alfanumérico o barra invertida en C: \ archivos de programa \ EasyPHP-5.3.8.1 \ www \ m \ img.php en la línea 6

Advertencia: preg_match() [function.preg-match]: Del imiter no debe ser alfanumérico ni la barra invertida en C: \ Archivos de programa \ EasyPHP-5.3.8.1 \ www \ m \ img.php en la línea 7

+0

La cuestión vinculada puede responder a su pregunta, pero ¿cómo se hacen las preguntas duplicados? –

Respuesta

45
  1. ereg está en desuso. No lo uses
  2. Las funciones preg son todas las "expresiones regulares de Perl" lo que significa que necesita tener algún tipo de marcador inicial y final en su expresión regular. A menudo esto será / o #, pero cualquier no alfanumérico funcionará bien.

Por ejemplo, éstos funcionarán:

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 ' 

Pero esto no:

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

gracias por explicar! – gordon33

+1

Cuando pruebo preg_match ("/ foo/g", $ needle, $ haystack); No funciona Recibí una advertencia de PHP, modificador Desconocido 'g' – James

+0

Según [esta respuesta] (http://stackoverflow.com/a/3578703/1676444) en otra pregunta, el modificador de patrón '/ g' no funcionará en PHP. Debería usar 'preg_match_all' en su ejemplo. [Lista de modificadores de patrón para PHP] (http://php.net/manual/en/reference.pcre.pattern.modifiers.php) – Turnerj

3

Con preg_match() su expresión regular debe comenzar y terminar con un delimitador como / con pocas excepciones (por ejemplo, agregando "i" al final para insensible a mayúsculas y minúsculas).

p. Ej.

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

"Un delimitador puede ser cualquier carácter no alfanumérico, sin barras diagonales ni espacios en blanco". [Manual] (http://www.php.net/manual/en/regexp.reference.delimiters.php). Pero sí, tienes razón, los delimitadores están faltando. – lonesomeday

+0

Ah sí. Gracias, actualizaré mi publicación! –

Cuestiones relacionadas