PDF de programación - Introducción a las Expresiones Regulares

Imágen de pdf Introducción a las Expresiones Regulares

Introducción a las Expresiones Regularesgráfica de visualizaciones

Publicado el 21 de Septiembre del 2020
91 visualizaciones desde el 21 de Septiembre del 2020
25,0 KB
3 paginas
Creado hace 17a (10/02/2003)
Introducción a las Expresiones Regulares

Teoría de Autómatas y Lenguajes Formales

Alejandro Viloria Lanero (aviloria@infor.uva.es)

Universidad de Valladolid



Las expresiones
regulares se utilizan para hacer búsquedas contextuales y
modificaciones sobre textos. A pesar de que las expresiones regulares estén muy
extendidas por el mundo de Unix, no existe un lenguaje estándar de expresiones
regulares. Más bien se puede hablar de diferentes dialectos. Existen por ejemplo dos
representantes del conocido programa grep, egrep y fgrep. Ambos usan expresiones
regulares con capacidades ligeramente diferentes. Perl se puede calificar como el
lenguaje con la sintaxis de expresiones regulares más desarrollado. Por suerte todos
estos dialectos siguen los mismos principios y en el momento que se han entendido, el
resto es sencillo.


1 Introducción

Para empezar, ubiquemos el problema por medio de un pequeño ejemplo: Supongamos
que tenemos la siguiente lista de teléfonos de una empresa:


Tlfno. Nombre Despacho
...
...
3412 Bob 123
3834 Jonny 333
1248 Kate 634
1423 Tony 567
2567 Peter 435
3567 Alice 535
1548 Kerry 534
...


Se trata de una empresa con 500 personas y los datos están almacenados en un fichero
ASCII normal. Los registros de personas cuyo teléfono comience con un 1, trabajan en
el edificio 1. ¿Quién trabaja en el edificio 1?

Una expresión regular puede responder a eso:
grep '^1' phonelist.txt
o
egrep '^1' phonelist.txt
o
perl -ne 'print if (/^1/)' phonelist.txt

En palabras normales, esto significa: Busca todas las líneas que comiencen con un 1. El
símbolo "^" es el encargado de indicar que sólo se busquen los números 1 que se
encuentren al principio de la línea.


2 Lenguajes y Expresiones Regulares

Con respecto al ejemplo anterior, podemos identificar los siguientes conceptos:
- Alfabeto: Conjunto de caracteres que aparecen en el fichero. Para generalizar nos
referiremos siempre a todo el juego ASCII de caracteres.
- Lenguaje Universal: Conjunto de todas las posibles secuencias de caracteres de ese
alfabeto.

El Lenguaje Universal es demasiado amplio y no permite ningún tipo de restricciones a
la hora de definir las secuencias de caracteres. Por eso nos interesa definir lenguajes
más restrictivos que nos permitan localizar solamente aquellas cadenas de texto
(secuencias de caracteres del alfabeto) que nos interesan.

Una Expresión Regular nos sirve para definir lenguajes, imponiendo restricciones sobre
las secuencias de caracteres que se permiten en el lenguaje que estamos definiendo. Por
tanto una Expresión Regular estará formada por el conjunto de caracteres del alfabeto
original, más un pequeño conjunto de caracteres extra (meta-caracteres), que nos
permitirán definir estas restricciones.

El conjunto de meta-caracteres que está más extendido es el siguiente:

Nombre
Cierre

Significado
El elemento precedente debe aparecer 0
o más veces
El elemento precedente debe aparecer 1
o más veces
Un carácter cualquiera excepto salto de
linea
Operador unario. El elemento precedente
es opcional
Operador binario. Operador OR entre dos
elementos. En el lenguaje aparecerá o
uno u otro.
Comienzo de línea

Fin de línea

Conjunto de caracteres admitidos

Conjunto de caracteres no admitidos

Dentro de un conjunto de caracteres
escrito
podemos
especificar un rango (ej., [a-zA-z0-9])
Agrupación de varios elementos

corchetes,

entre

alfabeto

coinciden

Debido a que algunos de los caracteres
del
con meta-
caracteres, el carácter de escape permite
indicar que un meta-carácter se interprete
como un símbolo del alfabeto
Carácter de salto de línea

Carácter de tabulación

Cierre positivo

Comodín

Condicional

OR

Comienzo de línea

Fin de línea



Operador de rango



Carácter de escape

Carácter
‘*‘
(asterisco)
‘+’
(símbolo de la suma)
‘.’
(punto)
‘?’
(interrogante)
‘|’
(barra vertical)

^
(ángulo superior)
$
(símbolo del dólar)
[...]
(caracteres entre corchetes)
[^...]
(caracteres entre corchetes)
‘-‘
(guión)

(...)
(elementos entre paréntesis)
\
(barra inversa)

Salto de línea

Tabulador

‘\n’
(barra inversa + n)
‘\t’
(barra inversa + t)


3 Ejemplos de Expresiones Regulares

Volviendo al ejemplo inicial, vemos como todos los números de teléfono se encuentran
al comienzo de la línea. Para extraer aquellos que empiezan por ‘1’ tan solo es necesario
definir la expresión regular:


Si quisiésemos extraer todos los que comenzasen por 1 ó 2:

ER := ‘^1’

ER:= ‘^[12]’


Si quisiésemos extraer a todos excepto a los que comenzasen por 1 ó 2:


Si quisiésemos extraer a todos los empleados que ocupan el despacho 123 ó el 124:

ER:= ‘^[^12]’

ER:= ‘(123|124)$’


Si quisiésemos extraer a todos los empleados que ocupan un despacho que comienza
por 3 (los de la tercera planta):

ER:= ‘3[0-9]*$’



4 Herramientas que permiten la búsqueda por Expresiones Regulares en los
entornos UNIX

- grep, egrep: Son las dos herramientas básicas a la hora de realizar la localización de
patrones que encajan con la expresión regular indicada en ficheros de texto. La
diferencia es sutil. grep es el comando básico, mientras que egrep permite la utilización
de varias expresiones regulares de forma simultánea y es considerablemente más rápido.
Al igual que numerosas herramientas de los entornos UNIX, están diseñadas para actuar
como filtros: reciben sus datos de la entrada estándar (consola), y escriben sus
resultados en la salida estándar. Para alterar este comportamiento debemos utilizar los
operadores de redirección del sistema operativo y/o los de tuberías.

- sed, awk: son dos herramientas más avanzadas que nos van a permitir manipular los
ficheros de forma automática utilizando expresiones regulares. Ambas serán explicadas
en sesiones sucesivas.


5 Referencias

Para más información acerca de los comandos indicados, podéis consultar la página del
manual del sistema operativo:
$> man grep

o bien podéis dirigiros a algunas de estas páginas:
http://iie.fing.edu.uy/~vagonbar/unixbas/expreg.htm
http://www.linuxfocus.org/Castellano/July1998/article53.html
http://www.ciberdroide.com/misc/novato/curso/regexp.html
http://bulmalug.net/body.phtml?nIdNoticia=770
  • Links de descarga
http://lwp-l.com/pdf18239

Comentarios de: Introducción a las Expresiones Regulares (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad