2010-02-18 12 views
5

consigo esta advertencia de php después del cambio de Split a preg_split para php compatibilidad 5.3:error preg_split php cuando se cambia de división para preg_split

PHP Warning: preg_split(): Delimiter must not be alphanumeric or backslash 

el código php es:

$statements = preg_split("\\s*;\\s*", $content); 

Cómo puedo arreglar la expresión regular para no usar más \

Gracias!

Respuesta

10

El error se debe a que necesita un carácter delimitador alrededor de su expresión regular.

$statements = preg_split("/\s*;\s*/", $content); 
4

Aunque la pregunta fue etiquetada como respondida dos minutos después de haber sido solicitada, me gustaría agregar algo de información para los registros.

Similar a la forma en que las cadenas están delimitadas por comillas, las expresiones regulares en muchos idiomas, como Perl o JavaScript, están delimitadas por barras diagonales. Esto dará lugar a expresiones que buscan de esta manera:

/\s*;\s*/ 

Esta sintaxis también permite especificar modificadores:

/\s*;\s*/Ui 

expresiones regulares compatibles con Perl (aka funciones preg _...) de PHP heredan esta. Sin embargo, PHP por sí mismo no es compatible con esta sintaxis, por lo que alimentar a preg_split() con /\s*;\s*/ generaría un error de análisis. En cambio, lo encierra con comillas para crear una cadena regular.

Una cosa más que debe tener en cuenta es que PHP permite cambiar el delimitador. Por ejemplo, puede usar esto:

@\s*;\s*@Ui 

¿Para qué sirve? Simplifica el uso de barras diagonales dentro de la expresión ya que no necesita escaparse de ellas. Compare:

/^\/home\/.*$/i 
@^/home/.*[email protected] 
Cuestiones relacionadas