2009-07-29 16 views
8

Alguien me está diciendo que necesito escapar de un punto y coma en un literal de expresión regular de Perl. Es decir, para hacer coincidir una línea que contenga un punto y coma, debería usar /\;/ y no /;/.¿Necesito escapar de un punto y coma en un literal de expresión regular de Perl?

Por lo que he leído, el punto y coma no tiene un significado especial en un literal de expresión regular, por lo que escaparse parece innecesario. He hecho algunos experimentos y /;/ parece funcionar bien. Con las advertencias activadas y el pragma use strict; vigente, perl no se queja.

¿Hay alguna razón por la cual /\;/ es mejor que ? ¿Es dependiente de esta versión?

Respuesta

12

No hay necesidad de escapar de un punto y coma en un patrón de expresión regular. No ha habido tal necesidad en los casi diez años que he usado Perl y dudo que alguna vez haya existido.

Se puede encontrar un resumen conciso de los caracteres especiales y secuencias de escape en perldoc perlreref.

1

No. /;/ siempre debe funcionar bien.

3

Quizás esto es un hábito desarrollado a partir del uso de perl one-liners en la línea de comandos y sin citar, por lo que el ';' dividir el resto en otro comando? De todos modos, como todos los demás dicen, no es necesario.

+0

@Jefromi Hmmmm ... Eso suena como una buena suposición. Estaba perdido en cuanto a por qué alguien pensaría que existía tal necesidad. –

5

Quizás alguien piense que el punto y coma necesita escaparse porque el resaltado de sintaxis de su editor se confunde con el punto y coma incrustado. En mi experiencia, la mayoría de los editores tienen muchos problemas para lidiar con la sintaxis de Perl. Recuerde, Only perl can parse Perl.

+0

@ Adam Otra buena conjetura. –

+1

OTOH, no se olvide de http://search.cpan.org/perldoc/PPI –

+0

Wow, PPI se ve increíble. Y es un gran ejemplo de documentación bien escrita, que incluye una buena descripción de por qué es tan difícil analizar Perl. –

0

Sí, punto y coma no es un meta caracter, así que supongo que no necesita escaparse.

+0

@jeje ¿Por qué adivinar? –

+0

@sinan Causa No revisé antes de responder :) – jeje

Cuestiones relacionadas