Sunteți pe pagina 1din 13

Unidad 2.

Expresiones Regulares

Una expresión regular, a menudo llamada también regex, es una secuencia de caracteres
que forma un patrón de búsqueda, principalmente utilizada para la búsqueda de patrones
de cadenas de caracteres u operaciones de sustituciones.

Figura 1. Prioridad de operadores

Las expresiones regulares forman un metalenguaje que permite denotar de una forma
cómoda y sencilla cualquier lenguaje regular.

Según el libro “Teoría de Autómatas y lenguajes formales” nos dice que el conjunto de
expresiones regulares sobre un determinado alfabeto puede verse a su vez como un
lenguaje donde cada cadena está denotando un lenguaje regular.
Página | 1
Definición

En la primera definición que encontré, que es del libro antes mencionado, los autores
Pedro García y compañía utilizan un ejemplo para definir y tratar de explicar lo que es una
expresión regular. Dicho ejemplo es el siguiente:

Sea ∑ un alfabeto que no contiene símbolos (,). Una expresión regular se define deforma
inductiva como sigue:

1. ∅ es una expresión regular que denota el lenguaje vacío.


2. Λ es una expresión regular que denota el lenguaje que contiene únicamente a la
cadena vacía, {λ}.
3. ∀a ∈ ∑, a es una expresión regular que denota el lenguaje que contiene únicamente
la cadena a, {a}.
4. Sea r una expresión regular que denota el lenguaje L_r, entonces (r) es también una
expresión regular para el mismo lenguaje.
a. r+s es una expresión regular que denota la unión de los lenguajes denotados
por r y s.
5. rs es una expresión regular que denota la concatenación de los lenguajes denotados
por r y s.
6. r^* es una expresión regular que denota la clausura del lenguaje denotado por r.

Sólo son expresiones regulares las definidas en los puntos anteriores.

Lo que yo pude observar en esta definición es que esta incluye las operaciones que se
pueden hacer entre elementos de un lenguaje, siempre y cuando genere cadenas válidas
dicha expresión.

Sin embargo, al seguir buscando, en el libro “Cómo programar en Java”, encontré una
definición más formal de lo que es una expresión regular. Este libro nos dice que las
expresiones regulares son una secuencia de caracteres y símbolos que definen un
conjunto de cadenas y que son útiles para validar la entrada y asegurar que los datos
estén en un formato específico.

Página | 2
Para mí la definición seria la siguiente:

Las expresiones regulares son una secuencia de símbolos dada por operaciones que
definen un conjunto de cadenas y que son útiles para validar la entrada de datos.

2.1. Definición formal de una ER

Las expresiones regulares representan patrones de cadenas de caracteres.

Una expresión regular r se encuentra completamente definida mediante el conjunto de


cadenas con las que concuerda.

Este conjunto se denomina lenguaje generado por la expresión regular y se escribe como
L(r).

El lenguaje depende, del conjunto de caracteres que se encuentran disponible (ASCII), el


conjunto será más general que el de caracteres, en cuyo caso los elementos del conjunto
se describen como símbolos, (conocido como alfabeto) y por lo general se representa
mediante ∑.

Una expresión regular r también contiene caracteres del alfabeto, pero tienen significado
diferente: en una expresión regular todos los símbolos indican patrones. Una expresión
regular r puede contener caracteres que tengan significados especiales (metacaracteres o
metasímbolos)

Página | 3
Figura 2. Propiedades de equivalencia

Expresiones regulares básicas: Son los caracteres simples del alfabeto, los cuales se
corresponden a sí mismos. Dado cualquier carácter a del alfabeto ∑, la expresión regular
a corresponde al carácter a escribiendo

L(a ) = {a}.

1. Un símbolo que indica una concordancia con la cadena vacía, se utiliza el símbolo ε
para denotar la cadena vacía establecido L(ε) ={ε}
2. Un símbolo más que corresponde a la ausencia de cadenas, cuyo lenguaje sea el
conjunto vacío, escrito
como { }, se utiliza φ y se
denota L(φ) = { }.

Página | 4
Figura 3. Ejemplos de expresiones regulares

2.2. Operaciones

Existen tres operaciones básicas en las expresiones regulares:

 Selección entre alternativas, la cual se indica mediante el metacarácter |


 Concatenación, que se indica mediante yuxtaposición (sin un metacarácter)
 Repetición o “cerradura” , la cual se indica mediante el metacarácter *.

• Selección entre alternativas. Si r y s son expresiones regulares, entonces r|s es una


expresión regular que define cualquier cadena que concuerda con r o con s.

El lenguaje r|s es la unión de los lenguajes de r y s, o L(r|s) = L(r) ∪ L(s).

Considere la expresión regular a|b: corresponde tanto al carácter a como al carácter b,


L(a|b)=L(a) ∪L(b)={a}∪ {b} = {a,b}.

La selección se puede extender a más de una alternativa, L(a|b|c|d) ={a,b,c,d}.

Figura 4. Representación gráfica de unión

Figura 4. Representación gráfica de unión

Concatenación. La concatenación de dos expresiones regulares r y s se escribe como rs,


y corresponde a cualquier cadena que sea la concatenación de dos cadenas, con la
primera de ellas correspondiendo a r y la segunda correspondiendo a s.

Página | 5
Por ejemplo: la expresión regular ab corresponde sólo a la cadena ab, mientras que la
expresión regular (a|b)c corresponde a las cadenas ac y bc.

Dados dos conjuntos de cadenas S1 y S2, el conjunto concatenado de cadenas S1S2 es


el conjunto de cadenas de S1 complementado con todas las cadenas de S2.

Si S1={aa,b} y S2={a,bb}, entonces S1S2={aaa,aabb,ba,bbb}.

La operación de concatenación para expresiones regulares se puede definir como


L(rs)=L(r)L(s).

La concatenación se puede extender a más de dos expresiones regulares: L(r1,r2,…


rn)=L(r1)L(r2)…L(rn)=el conjunto de cadenas formado al concatenar todas las cadenas de
cada una de las L(r1),…,L(rn).

Figura 5. Representación gráfica de concatenación

Repetición. Denominada también como cerradura, se escribe r*, donde r es una


expresión regular. La expresión regular r* corresponde a cualquier concatenación finita de
cadenas, cada una de las cuales corresponde a r.

Por ejemplo a* corresponde a las cadenas ε, a, aa, aaa, …

Se puede definir la operación de repetición en términos de lenguajes generados


definiendo, una operación similar * para conjuntos de cadenas. Dado un conjunto S de
cadenas, sea:

� = {�} ∪ � ∪ �� ∪ ��� ∪ …

Página | 6
Esta es una unión de conjuntos infinita, pero cada uno de sus elementos es una
concatenación finita de cadenas de S. Descrito:

Donde

� = �, . . �

� = ⋃�

�=0

es la concatenación de S por n veces

(� = {�}. )

Una vez analizado se define la operación de repetición para expresiones regulares como:

Considere la expresión (a|bb)*, corresponde a cualquiera de las cadenas siguientes: ε, a,


bb, aa, abb, bba, bbbb, aaa, aabb y sucesivamente.

En términos de lenguajes, L((a|bb)*)=L(a|bb)*={a,bb}*={ε, a, bb, aa, abb, bba,…}

Figura 6. Ejemplos
Página | 7
Precedencia de operaciones y el uso de los paréntesis. La descripción precedente no
toma en cuenta la cuestión de la precedencia de las operaciones de elección,
concatenación y repetición.

• Dada la expresión regular a|b*, se puede interpretar como (a|b)* o como a|(b*) que
difieren en demasía: L((a|b)*)={ ε, a, b, aa, ab, ba, bb,…} mientras que L(a|(b*))={ε, a, b,
bb, bbb, …}. La convención estándar es que la repetición debería tener mayor
precedencia, por lo que la segunda interpretación es la correcta.

Entre las tres operaciones, se le da al * la precedencia más alta, a la concatenación se le


da la precedencia que sigue y a la | se le otorga la precedencia más baja. De esta forma a|
bc* se interpreta como a|(b(c*)), mientras que ab|c*d se interpreta como (ab)|((c*)d).

Los paréntesis aquí se usan igual que en aritmética, pero el * tiene precedencia más alta
que +.

Nombres para expresiones regulares . Es útil como una forma de simplificar la notación
proporcionar un nombre para una expresión regular larga, de modo que no se escriba la
misma expresión.

Si se desea desarrollar una expresión regular para una secuencia de uno o más dígitos
numéricos:

(0|1|2|… 9) (0|1|2|…|9)*

o se podría escribir dígito dígito*

donde dígito = 0|1|2|…|9

es una definición regular del nombre dígito.

Página | 8
El uso de una definición regular es muy conveniente, pero introduce la compilación
agregada de que el nombre mismo se convierta en un metasímbolo y se deba encontrar
un significado para distinguirlo de la concatenación de sus caracteres.

Extensiones expresiones regulares

• Una o más repeticiones:

También conocida como cerradura positiva es una variante de la cerradura Kleene que
indica cero o más repeticiones, se denota con + y equivale una o más repeticiones.

Ejemplo: (0|1)+

• Cualquier carácter:

Se denota con el metacarácter. y equivale a que puede ser reemplazado con cualquier
carácter del alfabeto Ejemplo: .*1.* (todas las cadenas que contengan al menos un 1)

• Intervalo:

Se denota con corchetes y un guion.

Ejemplo: [a-z]

Cualquier carácter que no esté en el conjunto

Se denota con la el metacarácter -, significa que no incluya el o las expresiones regulares


afectadas. Ejemplo: - (a|c)

• Subexpresión opcional

Metacarácter ? Indica la opcionalidad de cadenas que pueden o no aparecer

Ejemplo: (+|-)? Dígito

Página | 9
Según Dean Kelley nos dice que en cualquier expresión regular pueden actuar los
caracteres de un alfabeto, los símbolos de las operaciones unión, cerradura y paréntesis
para agrupar. Pero también debemos establecer una prioridad en la actuación de los
operadores a fin de especificar el lenguaje que denota una expresión regular y evitar el
uso excesivo de paréntesis. La prioridad de actuación es la siguiente:

 La máxima prioridad es de los paréntesis.


 La cerradura tiene mayor prioridad que la concatenación y la unión.
 La concatenación tiene mayor prioridad que la unión.
 La unión tiene prioridad mínima.

La cerradura: Existen dos tipos de cerradura: la cerradura de Kleene (*) y la cerradura


positiva (+).

Estas dos son cerraduras básicamente iguales, lo único en lo que difieren es en que la
cerradura de Kleene concatena a cero o más veces un elemento, es decir, incluye el vacío
en el lenguaje que genera. En cambio la cerradura positiva es la concatenación de uno o
más veces un elemento y por esta razón no incluye el vacío.

La concatenación: La concatenación es la unión de un símbolo seguido de otro símbolo.


En esta operación el orden es muy importante.

La unión: Como su nombre lo dice es unir en un solo conjunto los símbolos que se
encuentran en los demás conjuntos.

2.3. Aplicaciones en problemas reales

Los autómatas y las expresiones regulares tienen diversas aplicaciones en el ámbito de


las ciencias de la computación como en la seguridad de redes, la generación de código,
entre otros.

Autómatas finitos no determinísticos con transiciones etiquetadas

Página | 10
Dada una expresión regular al pasar al autómata resultante, dicho autómata debe ser
capaz de reconocer si determinada cadena pertenece o no al lenguaje que define la
expresión regular inicial.

Este proceso presenta el problema de no poder determinar la posición exacta de sub-


expresión de la expresión regular cuando la cadena si coincide con el lenguaje, existen
algoritmos para resolver ese problema pero estos poseen complejidades muy elevadas.

Aplicación de expresiones regulares en la Detección de intrusiones en la red. Se propone


un programa o un circuito de alta velocidad para comprobar la coincidencia de un patrón
determinado en un texto dado, lo cual puede ser aplicado en la detección de intrusos en
redes, debido a la arquitectura sistólica del circuito la cual consta de unidades de
procesamiento simples.

Este proyecto trata del reconocimiento de una determinada subclase de una determinada
expresión regular, el patrón es puesto en el circuito antes de iniciar la comprobación de
coincidencia y el texto para ser recuperado se introduce en el circuito carácter por
carácter.

Esta nueva propuesta de sistema de detección de intrusos en redes la cual consta del
motor de comprobación de coincidencia de patrones, este motor está constituido por un
array sistólico de unidades de procesamiento simple el cual es denominado celda de
comparación.

Evitando la formación de latch en el reconocimiento de expresiones regulares.

En algunos de los reconocedores de expresiones regulares se presentan problemas


debido a que se producen latches o “pestillos” esto es una consecuencia que se da debido
a la interacción entre celular o celdas en el compilador lo cual altera el correcto
funcionamiento del reconocedor.

Por ello la idea es realizar una transformación que elimine la expresión que ocasiona la
aparición del latch o pestillo , a diferencia de las soluciones anterior que agrandaban los
reconocedores y alteraban la velocidad en la que trabajaba el reconocedor.

Página | 11
Una de las principales aplicaciones de los hermanos Deitel, son las expresiones regulares
que facilitan la construcción de un compilador.

A menudo se utiliza una expresión regular larga y compleja para validar la sintaxis de un
programa. Si el código del programa no concuerda con la expresión regular, el compilador
sabe que hay un error de sintaxis dentro del código.

Generalmente, convierten la expresión regular a un autómata finito no determinista y


después construyen el autómata finito determinista.

Otra aplicación del mismo libro es en los editores de texto. También encontramos a las
expresiones regulares en la biología molecular.

Según los hermanos Deitel, una de las principales aplicaciones de las expresiones
regulares es facilitar la construcción de un compilador. A menudo se utiliza una expresión
regular larga y compleja para validar la sintaxis de un programa. Si el código del programa
no concuerda con la expresión regular, el compilador sabe que hay un error de sintaxis
dentro del código.

Dentro de estas aplicaciones, en el libro “Introducción a la teoría de la computación”,


encontramos a los analizadores lexicográficos. Algunos generadores lexicográficos toman
como entrada una sucesión de expresiones regulares que describen a las fichas y
producen un autómata finito que reconozca cualquier ficha ahí descrita. Generalmente
convierten la expresión regular a un autómata finito no determinista y después construyen
el autómata finito determinista.

Otra aplicación del mismo libro es en los editores de texto. Algunos editores de texto y
programas similares permiten la substitución de una cadena por otra cualquiera que
cumpla con la expresión regular dada.

Otra de las aplicaciones que siempre utilizamos es en correctores de ortografía. La


corrección de ortografía tiene que ver, con localizar en una cadena de caracteres las
inversiones de dos de ellos, la omisión de alguno, la inserción de un carácter que no
corresponde a ninguno de los patrones especificados en la expresión regular.

Página | 12
También encontramos a las expresiones regulares en la biología molecular. Hay un sinfín
de algoritmos basados en el funcionamiento de autómatas finitos, que se usan para
encontrar patrones en el genoma humano.

Página | 13

S-ar putea să vă placă și