Pregunta Escapar una barra inclinada en una expresión regular


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


75
2018-05-20 18:35


origen


Respuestas:


¿Qué contexto / lenguaje? Algunos idiomas usan / como el delimitador del patrón, entonces sí, necesita escapar de él, dependiendo de qué idioma / contexto. Usted 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 escaparse. Pero AFAIK en todos los idiomas, el único significado especial es / tiene es puede ser el delimitador de patrón designado.


63
2018-05-20 18:38



Aquí hay algunas opciones:

  • En Perl, puede elegir delimitadores alternativos. No estás confinado a m//. Puedes elegir otro, como m{}. Entonces escapar no es necesario. Como cuestión de hecho, Damian Conway en "Mejores prácticas de Perl" afirma que m{} es el único delimitador alternativo que se debe usar, y esto se refuerza con Perl :: Critic (en CPAN). Aunque puede salirse con la suya usando una variedad de caracteres delimitadores alternativos, // y {} parece ser el más claro de 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. Ejemplos comunes son m(...), m[...]y m!...!.

  • En los casos en que no puede o prefiere no utilizar delimitadores alternativos, puede evitar las barras diagonales con una barra diagonal inversa: m/\/[^/]+$/ por ejemplo (usando un delimitador alternativo que podría convertirse en m{/[^/]+$}, que puede leer más claramente). Escapar de la barra con una barra invertida es lo suficientemente común como para haber ganado un nombre y una página de wikipedia: Síndrome de palillo de dientes inclinado. En las expresiones regulares donde solo hay una instancia, escaparse de una barra puede no elevarse al nivel de ser considerado un obstáculo para la legibilidad, pero si comienza a salirse de control, y si su lenguaje permite delimitadores alternativos como lo hace Perl, eso sería ser la solución preferida.


28
2018-05-20 19:09



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


8
2018-05-20 19:02



Si el delimitador es /, tendrá que escapar.


5
2018-05-20 18:39