Translate

domingo, 3 de abril de 2016

Expresiones Regulares

Las expresiones regulares son unas de las armas más potentes en el arsenal de los programadores, con ellas podemos construir desde editores de texto con corrector de gramática como compiladores de código o lectores de archivos de texto con contenido variado.

¿Pero que es exactamente una expresión regular?

Una expresión regular (regex, abreviación en ingles) es una cadena de texto especial que describe un patrón usado para buscar en coincidencias en otras cadenas.

¿Muy confuso?  Que tal un ejemplo:

Supongamos que quieres buscar y encontrar todos números de cédula (DNI o ID) que aparecen en el siguiente texto (o cualquier otro texto).
La cédula de maría es 12376589.
24000111 es la cédula de pedro.
¿No es 670123 el numero de cédula de el Sr. Regex?
Al no estar el n° de cédula siempre en el mismo sitio no podemos decirle a nuestros programas que lo extraigan de la cadena en "x" posición, pero con una expresión regular como esta:

[0-9]
Podemos decirle a nuestro programa que busque en el texto cualquier número.
Para probar que no te miento puedes probarlo en tu Notepad++.
Copia el texto de arriba en Notapad++, luego presiona la combinación de teclas: "CTRL + F". 
Esto abrirá una ventana como en la imagen, activando el RadioButton que dice Expresión Regular (Resaltado en amarillo) activaras la búsqueda con expresiones regulares.

Arriba en el campo de texto que dice "Buscar:" escribe la expresión regular [0-9] 
y dale al boton: "Buscar Siguiente".

Verás que esto resalta cada numero, uno por uno, en el texto. Esto no es lo ideal si queremos obtener el número completo... ¿No sería genial si pudiésemos obtener la secuencia numérica completa por cada búsqueda? Pues las expresiones regulares tambien pueden hacerlo, solo tenemos que agregarle el cuantificador "+", al final:
[0-9]+
Ahora verás como selecciona el número completo:



Esta expresión regular es una de las más simples posibles, pero no es la correcta para buscar cédulas o DNI en un texto, ya que sólo detecta números. Por lo general, la cédula suele tener un formato parecido al siguiente: 

X-012345678
En donde la X suele ser la nacionalidad de la persona, seguida por un guión el numero de cédula.  

Modificaremos el texto original para poder intentarlo :   
La cédula de maría es E-12376589.
V-24000111 es la cédula de pedro.
¿No es P-670123 el número de cédula de el Sr. Regex?

Ahora usaremos la siguiente expresión regular:

 [A-Z]-[0-9]+

Con ella obtenemos un resultado similar que el anterior:



Ya estamos mucho más cerca de crear una expresión regular que pueda utilizarse para detectar cédulas en cualquier texto, pero falta un detalle importante, algunas personas anotan su número de cédula usando puntos para la separación de miles. 

V-10.500.700
 Como esto es opcional, debemos crear una expresión regular que nos permita detectar las cédulas con puntos y sin ellos.

[A-Z]-(([0-9]{2}[.])([0-9]{3}[.])+)?[0-9]+

Upps ¿Muy compleja? Si, sin duda lo es. Las expresiones regulares son tan complejas como poderosas, sin embargo son ampliamente usadas en la programación, lenguajes como Java, C++, C#, Javascript, y muchos otros, soportan las expresiones regulares. 

En mi próxima entrada, explicaré un poco de la sintaxis de las expresiones regulares y explicare como usarlas en un programa Java para validar que se ingrese un email válido dentro de un campo de texto. 


Hasta pronto.


Me gusta