Caracteres Literales y Caracteres Especiales

Caracteres literales

La expresión regular más básica consiste en un único carácter literal, como la a. Coincide con la primera aparición de ese carácter en la cadena. Si la cadena es Jack is a boy, coincide con la a después de la J. El hecho de que esta a esté en medio de la palabra no le importa al motor regex. Si le importa, tendrá que decírselo al motor regex utilizando los límites de las palabras. Llegaremos a eso más adelante.

Este regex puede coincidir con la segunda a también. Sólo lo hace cuando le dice al motor regex que comience a buscar en la cadena después de la primera coincidencia. En un editor de texto, puede hacerlo utilizando su función "Buscar siguiente" o "Buscar adelante". En un lenguaje de programación, suele haber una función separada a la que se puede llamar para seguir buscando en la cadena después de la coincidencia anterior.

Del mismo modo, la expresión regular cat coincide con cat en About cats and dogs. Esta expresión regular consiste en una serie de tres caracteres literales. Esto es como decirle al motor regex: encuentra una c, inmediatamente seguida de una a, inmediatamente seguida de una t.

Tenga en cuenta que los motores regex distinguen entre mayúsculas y minúsculas por defecto. cat no coincide con Cat, a menos que le diga al motor regex que ignore las diferencias entre mayúsculas y minúsculas.

 

Caracteres especiales

Como queremos hacer algo más que buscar trozos de texto literales, necesitamos reservar ciertos caracteres para un uso especial. En los sabores de regex discutidos en este tutorial, hay 12 caracteres con significados especiales: la barra invertida \, el signo de intercalación ^, el signo de dólar $, el punto o el punto ., la barra vertical o el símbolo de tubería |, el signo de interrogación ?, el asterisco o la estrella *, el signo de suma +, el paréntesis de apertura (, el paréntesis de cierre ), el corchete cuadrado de apertura [, y la llave rizada de apertura {, Estos caracteres especiales se llaman a menudo "metacaracteres". La mayoría de ellos son errores cuando se utilizan solos.

Si desea utilizar cualquiera de estos caracteres como un literal en una expresión regular, debe escaparlos con una barra invertida. Si quiere que coincida con 1+1=2, la regex correcta es 1\+1=2. En caso contrario, el signo más tiene un significado especial.

Tenga en cuenta que 1+1=2, con la barra invertida omitida, es una expresión regular válida. Por lo tanto, no recibirá un mensaje de error. Pero no coincide con 1+1=2. Coincidiría con 111=2 en 123+111=234, debido al significado especial del carácter más.

Si se olvida de escapar un carácter especial donde su uso no está permitido, como en +1, entonces obtendrá un mensaje de error.

La mayoría de los sabores de expresiones regulares tratan la llave { como un carácter literal, a menos que sea parte de un operador de repetición como a{1,3}. Así que generalmente no es necesario escapar con una barra invertida, aunque puede hacerlo si lo desea. Pero hay algunas excepciones. Java requiere que se escapen las llaves de apertura literales. Boost y std::regex requieren que se escapen todas las llaves literales.

El término ] es un literal fuera de las clases de caracteres. Dentro de las clases de caracteres se aplican reglas diferentes. Esto se discute en el tema de las clases de caracteres. De nuevo, hay excepciones. std::regex y Ruby requieren que los corchetes de cierre se escapen incluso fuera de las clases de caracteres.

Todos los demás caracteres no deben ser escapados con una barra invertida. Esto se debe a que la barra invertida es también un carácter especial. La barra invertida en combinación con un carácter literal puede crear un token regex con un significado especial. Por ejemplo, \d es una abreviatura que coincide con un solo dígito del 0 al 9.

Escapar un único metacarácter con una barra invertida funciona en todos los sabores de expresiones regulares. Algunas variantes también admiten la secuencia de escape \Q...\E. Todos los caracteres entre la \Q y la \E se interpretan como caracteres literales. Por ejemplo, \Q*\d+*\E coincide con el texto literal *\d+*. La \E puede omitirse al final de la regex, por lo que \Q*\d+* es lo mismo que \Q*\d+*\E. Esta sintaxis es soportada por el motor JGsoft, Perl, PCRE, PHP, Delphi, Java, tanto dentro como fuera de las clases de caracteres. Sin embargo, Java 4 y 5 tienen errores que hacen que \Q...\E se comporte mal, por lo que no debería usar esta sintaxis con Java. Boost la soporta fuera de las clases de caracteres, pero no dentro.

 

Caracteres especiales y lenguajes de programación

Si eres programador, puede que te sorprenda que caracteres como la comilla simple y la comilla doble no sean caracteres especiales. Esto es correcto. Cuando utilice una expresión regular o una herramienta grep como PowerGREP o la función de búsqueda de un editor de texto como EditPad Pro, no debe escapar o repetir los caracteres de las comillas como se hace en un lenguaje de programación.

En tu código fuente, tienes que tener en cuenta qué caracteres reciben un tratamiento especial dentro de las cadenas por parte de tu lenguaje de programación. Esto se debe a que esos caracteres son procesados por el compilador, antes de que la biblioteca regex vea la cadena. Así, la regex 1\+1=2 debe escribirse como "1\+1=2" en el código C++. El compilador de C++ convierte la barra invertida escapada en el código fuente en una sola barra invertida en la cadena que se pasa a la biblioteca regex. Para que coincida con c:\temp, es necesario utilizar la expresión regular c:\\temp. Como cadena en el código fuente de C++, esta regex se convierte en "c:\\\\temp". Cuatro barras invertidas para que coincida con una sola, efectivamente.

No te pierdas los últimos artículos:

Web Scraping con Python y BeautifulSoup para Principiantes

Web Scraping con Python y BeautifulSoup para Principiantes

Bienvenido a esta guía sobre Web Scraping con Python y BeautifulSoup, diseñada especialmente para principiantes. Si estás buscando aprender a extraer datos de sitios web de manera eficiente, seguro que ...
Curso de Python Básico Gratis

Curso de Python Básico Gratis

Módulo 1: Introducción a Python Nuestra meta principal es que, al final de este curso, tengas una sólida comprensión de los fundamentos de Python y estés listo para crear tus ...
Sistemas Expertos: ¿Qué son y para qué sirven?

Sistemas Expertos: ¿Qué son y para qué sirven?

Los sistemas expertos representan una rama fascinante de la inteligencia artificial, diseñada para emular la toma de decisiones de un humano experto en un campo particular. Estas herramientas avanzadas combinan ...
La Historia de la Inteligencia Artificial contada en Años

La Historia de la Inteligencia Artificial contada en Años

¿Cómo comenzó todo? Echemos un ojo a la historia de la IA a lo largo del tiempo. Desde 1950 hasta 2024. El artículo es largo, usa la tabla de contenidos ...
¿Qué es el meta-aprendizaje?

¿Qué es el meta-aprendizaje?

El mundo de la Inteligencia Artificial (IA) está en constante evolución, y una de las áreas más intrigantes y prometedoras es el metaaprendizaje. Pero, ¿qué es exactamente el metaaprendizaje y ...