Expresiones regulares

Anuncio
Expresiones regulares
Víctor Palomo Silva 41743
Expresiones regulares.
1. Introducción a las expresiones regulares.
Las expresiones regulares son una serie de caracteres e incluso cadenas de texto
que forman un patrón, normalmente representativo de otro grupo de caracteres mayor,
de tal forma que podemos comparar el patrón con otro conjunto de caracteres para ver
las coincidencias.
Las expresiones regulares están disponibles en casi cualquier lenguaje de
programación, pero aunque su sintaxis es relativamente uniforme, cada lenguaje usa su
propio dialecto.
Nuestro patrón puede estar formado por un conjunto de carácteres (un grupo de
letras, números o signos) o por meta caracteres que representan otros carácteres, o
permiten una búsqueda contextual.
Los meta-caracteres reciben este nombre porque no se representan a ellos
mismos, sino que son interpretados de una manera especial.
He aqui la lista de meta caracteres mas usados:
.*?+[](){}^$|\
2. Su uso en la actualidad.
Motores para el usuario final:
Son programas que permiten realizar búsquedas sobre el contenido de un
archivo o sobre un texto extraído y colocado en el programa. Están diseñados para
permitir al usuario realizar búsquedas avanzadas usando este mecanismo, sin embargo
es necesario aprender a redactar expresiones regulares adecuadas para poder utilizarlos
eficientemente. Éstos son algunos de los programas disponibles:




grep: Programa de los sistemas operativos Unix/Linux
PowerGrep: versión de grep para los sistemas operativos Windows
RegexBuddy: Ayuda a crear las expresiones regulares en forma
interactiva y luego le permite al usuario usarlas y guardarlas.
EditPad Pro: Permite realizar búsquedas con expresiones regulares sobre
archivos y las muestra por medio de código de colores para facilitar su
lectura y comprensión.
Expresiones regulares
Víctor Palomo Silva 41743
Motores para el programador:
Permiten automatizar el proceso de búsqueda de modo que sea posible utilizarlo
muchas veces para un propósito específico. Estas son algunas de las herramientas de
programación disponibles que ofrecen motores de búsqueda con soporte a expresiones
regulares:
 Java: Existen varias librerías hechas para java que permiten el uso de
RegEx, y Sun planea dar soporte a estas desde el SDK
 JavaScript: A partir de la versión 1.2 (ie4+, ns4+) JavaScript tiene
soporte integrado para expresiones regulares, lo que significa que las
validaciones que se realizan normalmente en una página web podrían
simplificarse grandemente si el programador supiera utilizar esta
herramienta.
 Perl: Es el lenguaje que hizo crecer a las expresiones regulares en el
ámbito de la programación hasta llegar a lo que son hoy en día.
 PCRE: Librería de ExReg para C, C++ y otros lenguajes que puedan
utilizar librerías dll (Visual Basic 6 por ejemplo).
 PHP: Tiene dos tipos diferentes de expresiones regulares disponibles
para el programador.
 Python: Lenguaje de "scripting" popular con soporte a Expresiones
Regulares.
 .Net Framework: Provee un conjunto de clases mediante las cuales es
posible utilizar expresiones regulares para hacer búsquedas, reemplazar
cadenas y validar patrones.
3. Ejemplos prácticos.
Validación de e-mails en un formulario web
Hemos dicho que las expresiones regulares son uno de los instrumentos mas
útiles en cualquier lenguaje de programación. ¿Para que podemos usarlas?. Uno de sus
usos mas típicos es el de validar entradas de datos que los visitantes de una página
puedan mandarnos a través de formularios html.
El ejemplo mas corriente es el de una dirección email. Imaginemos que
queremos filtrar las direcciones introducidas por los visitantes, para evitar introducir en
la base de datos la típica dirección basura ghghghghghghg. Todos sabemos la estructura
de una dirección email, formada por la cadena nombreusuario, el signo @ y la cadena
nombredominio. Tambien sabemos que nombredominio esta formado por dos
subcadenas, 'nombredomino', un '.' y un sufijo 'com', 'net', 'es' o similar.
Por tanto la solución a nuestro problema es idear una expresión regular que
identifique una dirección email valida típica, y confrontarla con la cadena (dirección
email) pasada por el visitante por ejemplo:
^[^@ ]+@[^@ ]+.[^@ .]+$
Expresiones regulares
Víctor Palomo Silva 41743
Vamos a diseccionar nuestra expresión regular:
Queremos decir que el primer carácter que buscamos debe estar al principio de
la cadena a comparar.
[^@ ]
ese primer signo no debe ser ni el signo @ ni un espacio
+
y se repite una o mas veces
@
luego buscamos el signo @
[^@ ]+
Seguido de otro signo que no es un @ ni un espacio y se repite una o mas veces
Seguido de un . (punto).
[^@ .]
Seguido de un carácter que no sea ni @, ni espacio ni punto
+$
Que se repite una o mas veces y el último esta al final de la cadena
Y para comprobarlo en la práctica, usamos una de las funciones que aportan los
lenguajes de programación como php relacionadas con las expresiones regulares:ereg().
Acudiendo al manual php, podemos averiguar que esta función tiene la siguiente
sintaxis:
ereg (string patron, string cadenaAProcesar)
Busca en string las coincidencias con la expresión regular pattern. La búsqueda
diferencia entre mayúsculas y minúsculas.
Devuelve un valor verdadero si se encontró alguna coincidencia, o falso in no se
encontraron coincidencias u ocurrió algún error.
Busquedas de textos dentro de archivos (comando grep)
Su funcionalidad es la de escribir en salida estándar aquellas líneas que
concuerden con un patrón. Su sintaxis es como sigue:
grep [opciones] PATRÓN [ARCHIVO...]
grep [opciones] [-e PATRÓN | -f ARCHIVO] [ARCHIVO...]
Este comando realiza una búsqueda en los ARCHIVOs (o en la entrada estándar, si
no se especifica ninguno) para encontrar líneas que concuerden con PATRÓN. Por defecto
grep imprime en pantalla dichas líneas. Sus opciones más interesantes son:
Expresiones regulares
Víctor Palomo Silva 41743
-c: Modificar la salida normal del programa, en lugar de imprimir por salida
estándar las líneas coincidentes, imprime la cantidad de líneas que coincidieron en cada
archivo.
-e PATRÓN: Usar PATRÓN como el patrón de búsqueda, muy útil para proteger
aquellos patrones de búsqueda que comienzan con el signo «-».
-f ARCHIVO: Obtenee los patrones del archivo ARCHIVO
-H: Imprimir el nombre del archivo con cada coincidencia.
-r: Buscar recursivamente dentro de todos los subdirectorios del directorio
actual.
El patrón de búsqueda normalmente es una palabra o una parte de una palabra.
También se pueden utilizar expresiones regulares, para realizar búsquedas más
flexibles.
Algunos ejemplos simples con el comando Grez
Si se quisiera buscar la ocurrencia de todas las palabras que comiencen con «a»
minúscula, la ejecución del comando sería algo así:
$ grep 'a*' archivo
Uso de expresiones regulares para la definición de cadenas aceptadas por
un analizador lexico.
Jaccie es un generador de compiladotes que permite interactuar al usuario
pudiendo visualizar paso a paso el procesamiento del análisis léxico, del sintáctico y de
la evaluación de atributos.
Está escrito en Java y genera ficheros .java, opera en las tres sucesivas fases,
antes mencionadas, a partir de descripciones formales de expresiones regulares,
gramáticas libres de contexto y reglas de evaluación de atributos respectivamente.
Contiene un “editor especial” para producir y modificar las descripciones formales y un
“entorno de depuración” para probar los componentes generados.
4. Bibliografía
Apuntes y documentación de la asignatura Compiladores e Interpretes. J.A.
Román
http://dns.bdat.net/ (Visitada el 20/01/08)
http://www.desarrolloweb.com (Visitada el 20/01/08)
Descargar