Escapar correctamente expresiones regulares

MiguelMJ - 2021-02-21

Las expresiones regulares suelen ser difíciles de entender y aún más de escribir. Probablemente uno de los aspectos más confusos al principio son los caracteres de escape.

Cuándo y por qué escapar caracteres.

Las expresiones regulares (ER para abreviar) son herramientas para buscar patrones en texto. Hay algunos caracteres con significados especiales (su explicación no es el objetivo de esta publicación) y si queremos usarlos sin significado especial, añadimos una barra invertida (\) delante de ellos. A esto lo llamamos escapar un carácter.

Nótese que esto hace de \ un carácter especial en sí mismo.

Un ejemplo simple: Una ER que coincida con Balance de cuenta: 50$ sería Balance de cuenta: 50\$. No obstante, en la mayoría de los lenguajes, \ también es un carácter especial para los strings (además de para las ER). Por eso, el string que tendríamos que usar para construir la ER anterior, debería ser: Balance de cuenta: 50\\$.

Consejo para escapar las ER manualmente.

Debemos pensar en el paso de las cadenas que buscamos a ER y de ER a string, en lugar de pensar en los pasos de string a ER y a cadena. Veamos un ejemplo:

¿Y si queremos hacer coincidir [ERR] $var tiene valor “gg”?

  1. Cadena coincidente: [ERR] $var tiene valor “gg”

  2. A ER: [, ], $ y " son caracteres especiales en la ER, así que los escapamos:

    \[ERR\] \$var tiene valor \"gg\"

  3. A String: \ y " son caracteres especiales; los escapamos:

    \\[ERR\\] \\$var tiene valor \\\"gg\\\"

El punto es escribir un ejemplo de la cadena que quieres hacer coincidir y escapar, paso a paso, los caracteres especiales de la ER y el string hasta que tengas el que vas a usar en tu programa.

Escapar ER con funciones

(Enlaces a respuestas de Stack Overflow)

También, otra opción es escapar la ER con alguna función auxiliar. Algunos lenguajes, como Python o Java ofrecen estas funciones por defecto. En otros, como JavaScript o C++ debes definirlas por tu cuenta.

¡Atención! Asegúrate de usar estas funciones con RE en las que no quieres caracteres especiales, porque si no tienes cuidado, puedes acabar escapando algún caracter sin querer y estropeando la ER.