2011-05-20 11 views
68

Mi pregunta es simple, y se trata de escapar de expresiones regulares. ¿Tienes que escapar de una barra inclinada / en una expresión regular? ¿Y cómo vas a hacerlo?Escapar una barra inclinada en una expresión regular

+0

¿Qué implementación de lenguaje/expresión regular usas? – Gumbo

+3

Im usando Perl para mi expresión regular – Zerobu

Respuesta

61

¿Qué contexto/idioma? Algunos lenguajes utilizan / como el delimitador de patrones, por lo que sí, debe escapar de él, dependiendo de qué idioma/contexto. Se escapa poniendo una barra hacia atrás delante de él: \/ Para algunos idiomas (como PHP) puede usar otros caracteres como delimitador y, por lo tanto, no necesita escapar de él. Pero AFAIK en todos los idiomas, el único significado especial que tiene el / es que puede ser el delimitador de patrón designado.

+0

Perdón por la pregunta novato pero en este hilo (que entiendo completamente es acerca de RegEx - Perl Regex en eso) "delimitador de patrón" parece significar que debe interpretarse como una ruta (directorio), en lugar de como un carácter literal en el nombre del archivo. ¿Estoy en lo correcto en esta suposición? –

5

Si el delimitador es /, deberá escaparse.

7

Utilice la barra invertida \ o elegir un delimitador diferente, es decir m#.\d# en lugar de /.\d/ "En Perl, puede cambiar el delimitador de expresión/regular para casi cualquier otro carácter especial si lo precedió con la letra m (para el partido) ; "

26

En Perl, puede elegir delimitadores alternativos. Usted no está confinado al m//. Puede elegir otro, como m{}. Entonces escapar no es necesario. De hecho, Damian Conway en "Perl Best Practices" afirma que m{} es el único delimitador alternativo que se debe usar, y esto se ve reforzado por Perl :: Critic (en CPAN). Aunque puede salirse con la suya usando una variedad de caracteres delimitadores alternativos, // y {} parecen ser los más claros para descifrar más adelante. Sin embargo, si cualquiera de esas opciones resulta en demasiado escape, elija la que sea más adecuada para la legibilidad. Los ejemplos más comunes son m(...), m[...] y m!...!.

+1

+1 para Perl Best Practices y Perl :: Critic –

+1

¿Puedes dar un ejemplo? Tengo esto: 'perl -pi -e" s/chdir. */Chdir $ ROBOT_PATH/g "startup_scripts/supervisord.conf' Y estoy teniendo conflictos con las barras diagonales. – CMCDragonkai

+0

Tenga en cuenta que utiliza un 's', no un' m', al hacer un reemplazo (también conocido como sustituto) con expresiones regulares. http://www.perlfect.com/articles/regex.shtml – Mashmagar

Cuestiones relacionadas