2010-03-23 15 views
7

estoy usando una librería que utilizaCómo convertir eregi a preg_match?

eregi($match="^http/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$",$line,$matches) 

sino como eregi es obsoleto ahora, quiero convertir a preg_match anterior. Probé como abajo

preg_match($match="/^http/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$/i",$line,$matches) 

pero genera un error diciendo Unknown modifier '[' in filename.php

alguna idea de cómo resolver este problema?

Gracias

+0

Puede dejar de lado el '$ coincidencia =' tanto en código ejemplos, de esa manera son completamente innecesarios – lamas

+0

["Cómo cambiar el eregi de PHP a preg_match"] (http://customphpfunctions.blogspot.com/2011/12/how-to-change-phps-eregi-to-pregmatch.html) tiene una explicación de eregi y preg_match y también cómo reemplazar la función depreciada. –

Respuesta

6

Si usa / como delimitador de expresiones regulares (es decir, preg_match('/.../i', ...)), necesita para escapar de cualquier instancia de / en su patrón o php pensará que se está refiriendo al final del patrón.

También puede utilizar un carácter diferente, como % como su delimitador:

preg_match('%^http/[0-9]+\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)$%i',$line,$matches) 
+0

+1 para '/' explicando. Sí, cuando PHP encuentra cualquier '/' en su expresión regular, lo considerará como el final de la expresión regular. –

6

Es necesario para escapar de la delimiters dentro de la expresión regular (en este caso el /):

"/^http\\/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$/i" 

Pero también se puede elegir un delimitador diferente como ~:

"~^http/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\$~i" 
+0

La primera sugerencia funcionó a las mil maravillas. –

5

que puede probar:

preg_match("@^http/[0-9]+\\.[0-9]+[ \t]+([0-9]+)[ \t]*(.*)\[email protected]",$line,$matches) 
  • Puede caer el la $match=
  • está usando el / como el delimitador y hay otro/presente en el regex después de http, que de hecho marca el final de su expresión regular. Cuando PHP ve el [ después de esto, se queja.
  • Se puede utilizar un conjunto diferente de delimitadores como @ o escapar de la / después http