Está en la página 1de 38

Expresiones Regulares

Oscar Hernando Arenas Arenas


Generalidades (1/2)
● Las expresiones regulares son una secuencia de caracteres y símbolos
especiales (operadores) que definen un conjunto de cadenas.
● Son usadas para validar la entrada y asegurar que los datos estén con un
formato específico.
● También se usan en el diseño de intérpretes y compiladores para indicar las
características de las cadenas que componen el lenguaje de programación.
● Una expresión regular E 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(E).
Generalidades (2/2)
● El lenguaje generado depende del conjunto de símbolos o caracteres que se
encuentra disponible.
● Este conjunto no vacío de símbolos legales se conoce como alfabeto y por lo
general se representa mediante el símbolo griego Σ (sigma).
● Los metacaracteres o metasímbolos son caracteres con significado especial
dentro de la expresión regular.
● Algunos metacaracteres son: ε, Φ, |, *, (, ), +, [, ], ., ^, ?
● El significado de un metacaracter se suele "desactivar" anteponiendo el
backslash o encerrandolo entre comillas simples.
Alfabeto
● Llamaremos alfabeto a cualquier conjunto finito no vacío.
● Usualmente lo denotaremos como Σ.
● Los elementos de Σ se llamarán símbolos o caracteres.
● Si bien normalmente usaremos alfabetos intuitivos como {0, 1}, {a, b}, {a . . .
z}, {0 . . . 9}, etc., algunas veces usaremos conjuntos más sofisticados como
alfabetos.
Cadenas (1/2)
● Una cadena o palabra sobre un alfabeto Σ es cualquier sucesión (o
secuencia) finita de elementos de Σ.
● Admitimos la existencia de una única cadena que no tiene símbolos, la cual
se denomina cadena vacía y se denota con la letra griega ε (epsilon).
● La cadena vacía desempeña, en la teoría de la computación, un papel similar
al del conjunto vacío ∅ en la teoría de conjuntos.
● Ejemplo: Sea Σ = {a, b} el alfabeto que consta de los dos sımbolos a y b. Las
siguientes son cadenas sobre Σ: aba, ababaaa, aaaab
Cadenas (2/2)
● Σ* denota el conjunto de todas las cadenas que se pueden formar con los
símbolos del alfabeto Σ.
● La longitud de una cadena u ∈ Σ* se denota |u| y se define como el número
de símbolos de u (contando los símbolos repetidos). Con |ε| = 0
Expresion regular
Una expresión regular (ER) sobre un alfabeto finito Σ se define recursivamente
como sigue:

1. Para todo r ∈ Σ, r es una ER


2. ε es una ER
3. Ø es una ER
4. Si r y s son ERs, r|s es una ER
5. Si r y s son ERs, rs es una ER
6. Si r es una ER, r* es una ER
7. Si r es una ER, (r) es una ER
Lenguaje generado
El lenguaje generado por una expresión regular E, L(E), se define recursivamente
como sigue:

1. Si r ∈ Σ, L(r) = {r}
2. L(ε) = {ε}
3. L(Φ) = ∅ = {}
4. L(r|s) = L(r) ∪ L(s) = {r} ∪ {s} = {r, s}
5. L(rs) = L(r)L(s) = {rs}
6. L(r*) = L(r)* = {r}* = {ε, r, rr, rrr, rrrr, rrrrr, ...}
7. L((r)) = L(r) = {r}
Operaciones básicas y precedencia
● Selección de alternativas: Se indica mediante la barra vertical (|) o pleca
● Concatenación: Se indica mediante la yuxtaposición de caracteres
● Repetición (cerradura o clausura de Kleene): Se indica mediante el asterisco
(*) y la expresión regular r* genera el conjunto L(r*) = {ε, r, rr, rrr, rrrr, rrrrr, ...}.
Equivale a cero o más repeticiones del carácter r.
Propiedades de la unión o selección de alternativas
Sean r, s, t expresiones regulares:

1. Conmutativa: r|s = s|r


2. Asociativa: (r|s)|t = r|(s|t)
3. Elemento neutro (Ø): r|Ø = r
4. Idempotencia: r|r = r
Propiedades de la concatenación
Sean r, s, t expresiones regulares:

1. Asociativa: (rs)t = r(st)


2. Distributiva respecto a la unión: r(s|t) = rs|rt ó (s|t)r = sr|tr
3. Elemento neutro (ε): rε = εr = r
4. No es conmutativa
Propiedades de la repetición
1. ε* = ε
2. Φ* = ε
3. r*r* = r*
4. r*r = rr*
5. (r*)* = r*
6. r* = ε|rr*
7. r* = ε|r|r2|...|rn|rn+1r*
8. (r*|s*)* = (r|s)*
Operador repetición sobre conjuntos
Sea S un conjunto de cadenas,

S* = {ε} ∪ S ∪ SS ∪ SSS ∪ …

En ocasiones se escribe como

Donde Si = S…S es el producto cartesiano de S por i veces, con S0 = {ε}


Ejemplo 1:
Considere el alfabeto (Σ) constituido solo por tres caracteres

Σ = {a, b, c}

y escriba una expresión regular que genere el conjunto de todas las cadenas
sobre Σ que contienen sólo una b.
Ejemplo 2:
Indique al menos ocho elementos del lenguaje generado L por la expresión
regular anterior.
Ejemplo 3:
Considere el alfabeto (Σ) constituido solo por tres caracteres

Σ = {a, b, c}

y escriba una expresión regular que genere el conjunto de todas las cadenas
sobre Σ que contienen como máximo una b.
Ejemplo 4:
Considere el alfabeto (Σ) constituido solo por tres caracteres

Σ = {a, b, c}

y la expresión regular

((b|c)*a(b|c)*a)*(b|c)*

e indique una descripción concisa en español del lenguaje generado por dicha
expresión.
Ejemplo 5:
Encuentre expresiones regulares que representen los siguientes lenguajes,
definidos sobre el alfabeto Σ = {0, 1}:

1. Lenguaje de todas las cadenas que tienen exactamente dos ceros


2. Lenguaje de todas las cadenas cuyo penúltimo símbolo es un 0
3. Lenguaje de todas las cadenas con símbolos alternados.
Ejemplo 6:
Demuestre que la selección de alternativas (|) es asociativa. Es decir, pruebe que

r|(s|t) = (r|s)|t
Ejemplo 7:
Considere el alfabeto

Σ = {a, b, c}

y escriba una expresión regular que genere el conjunto de todas las cadenas
sobre Σ que no contienen dos b consecutivas.
Definiciones 1
Nombres de expresiones regulares
A menudo es útil como una forma de simplificar la notación proporcionar un
nombre para una expresión regular larga (definición regular), de modo que no
tengamos que escribir la expresión misma cada vez que deseemos utilizarla.

digito = 0|1|2|3|4|5|6|7|8|9

Lenguaje generado:

L(digito) = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
Intervalo o clases de caracteres
Secuencia de caracteres entre corchetes. Los caracteres pueden listar uno al lado
de otro o separados por guión. El intervalo de caracteres [0-9] indica los
caracteres consecutivos desde el cero hasta el 9.

Ejemplos:

● [0-9] = 0|1|2|3|4|5|6|7|8|9
● [abc] = a|b|c
● [a-z] = a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
● [A-Z] = A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z
● [a-zA-Z] = [a-z]|[A-Z]
● [a-zA-Z0-9] = [a-z]|[A-Z]|[0-9]
Ejemplo 8:
Considere el alfabeto (Σ) constituido por los caracteres

Σ = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

y escriba una expresión regular que genere las cadenas que representan todos
los números naturales.
Operador +: Una o más repeticiones
La expresión regular r+ indica que el carácter r se repite una o más veces. Por
tanto, no admite la cadena vacía. Así, el lenguaje generado por r+ es:

L(r+) = {r, rr, rrr, rrrr, rrrrr, ...}

Podemos concluir que

rr* = r+ ó r* = ε|r+

El ejemplo anterior se puede reescribir de la siguiente forma:

● natural = [0-9]+
Ejemplo 9:
Considere el alfabeto (Σ) constituido por los caracteres

Σ = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

y escriba una expresión regular que genere las cadenas que representan los
números naturales pero ninguna cadena puede iniciar con cero, excepto la
cadena que representa el cero.
Ejemplo 10:
Considere el alfabeto (Σ) constituido por los caracteres

Σ = {+, -, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

y escriba una expresión regular que genere las cadenas que representan todos
los números enteros pero ninguna cadena puede iniciar con cero (excepto la
cadena que representa el cero) y cada cadena puede estar precedida o no por
solo uno de los símbolos ’+’ o ‘-’.

Por ejemplo, las siguientes cadenas son válidas {487, +234, -195} y las siguientes
cadenas no son validas {++23, 4+32, --125, 3+45--21}
Operador ?: Subexpresiones opcionales
El operador indica que una subexpresión puede ocurrir o no. Por ejemplo, la
expresión regular r? equivale a

r? = ε|r

El operador opcional indica cero o una ocurrencia.

Escriba una expresión regular para los números enteros:

● natural = [0-9]+
● entero= (’+’|-)? natural
Ejemplo 11:
Escriba una expresión regular para especificar un identificador (variable,
constante, nombre de función o nombre de clase) válido en un lenguaje de
programación.

Un identificador es una cadena de longitud uno o mayor que contiene solo


caracteres alfabéticos, numéricos y el guión bajo, y no comienza con caracter
numérico.
Extensiones: Operadores adicionales
● Operador punto :Cualquier carácter excepto el cambio de línea
○ .*b.*
● Operador ^:Cualquier carácter que no esté en un conjunto dado
○ ^a, ^(a|b|c), ^[abc]
Ejercicios (1/6)
● Indique el lenguaje generado por la siguiente expresión regular:

L((a|b)(c|d))

● Liste al menos ocho cadenas generadas por cada una de las siguientes
expresiones regulares, sobre el alfabeto Σ = {a, b}:
○ L(ab*)
○ L(a*b*)
○ L((a|b)*)
○ L(a*|b*)
Ejercicios (2/6)
● Considere el alfabeto Σ = {a, b} y escriba una expresión regular que genere el
lenguaje de todas las cadenas que:
○ Tienen exactamente una a
○ Comienzan con el símbolo b y terminan con el símbolo a.
○ Tienen un número par de símbolos (cadenas de longitud par)
○ Tiene exactamente dos aes
○ Tiene al menos dos a
○ No terminan con la subcadena ab
○ Tienen un número par de aes
○ Tienen un número impar de bes
● Muestre que r(s|t) = rs|rt
● La siguiente igualdad, ¿es verdadera o falsa?: L(r?) = L(ε|r)
Ejercicios (3/6)
● Liste al menos ocho cadenas generadas por cada una de las siguientes
expresiones regulares, sobre el alfabeto Σ = {r, s, t}:
○ L(r|st*)
○ L(r|s*t)
○ L((r|s)*t)
● Escriba expresiones regulares para los siguientes conjuntos de caracteres
sobre Σ = {a, b, …, z} o explique las razones por las que no se pueden
escribir:
○ Todas las cadena de letras minúsculas que comiencen y finalicen con a.
○ Todas las cadena de letras minúsculas que o comiencen o finalicen con a (o ambas).
○ Todas las cadenas de dígitos que no tengan ceros al principio.
○ Todas las cadenas de dígitos que representen números pares.
Ejercicios (4/6)
● Escriba una descripción en español para la siguiente expresión regular:
○ [A-Z][a-z]*
○ (0|1|2|3|4|5|6|7|8|9|A|B|C|D|E|F)+(x|X)
● Escriba una expresión regular para cadenas (palabras) que contengan al
menos dos vocales consecutivas.
● Escriba la expresión regular para especificar un número real positivo.
● Escriba la expresión regular para especificar un número real (positivo o
negativo).
● Demuestre que: r+ = rr*
● Escriba una expresión regular que genere todas las cadenas de a y b que no
contengan tres b consecutivas.
Ejercicios (5/6)
● Escriba la expresión regular para especificar un comentario de línea al estilo
Java.
● Escriba una expresión regular para especificar un número de celular que
tenga la forma:

(300) 329-47-61

● Considere el alfabeto Σ = {a, b, c} y escriba un expresión regular que genere


el lenguaje de todas las cadenas que contienen al menos una a y al menos
una b.
● Escriba la expresión regular para números con notación científica.
Ejercicios (6/6)
● ¿Cuáles de las siguientes afirmaciones son verdaderas?
○ (L(a*) ∪ L(b*)) ⊂ L(a|b)*
○ baa ∈ L(a*b*a*b*)
○ L(b*a*) ∩ L(a*b*) = L(a*) ∪ L(b*)
○ abcd ∈ L((a(cd)*b)*)
○ L(a*b*) ∩ L(c*d*) = ∅
● Escriba la expresión regular para especificar un identificador (variable o
constante) en un lenguaje de programación. Un identificador es una cadena
de longitud uno o más que contiene solo caracteres alfabéticos, numéricos y
el guión bajo, y no comienza con caracter numérico.
● Escriba una expresión regular para validar que la entrada a una aplicación
del número de identificación de una persona está en el formato NUIP.
Ejercicio de programación
Escriba un método que retorne una cadena de caracteres (String) aleatoria de
tamaño “longitud” y con símbolos aleatoriamente seleccionados del alfabeto dado
en el primer parámetro.

Firma del método solicitado:

public static String generarCadenaAleatoria(String alfabeto , int longitud)


Referencias
● Aho, A., Lam, M., Sethi, R. & Ullman, J. (2007). Compilers: Principles,
techniques and tools (2nd ed.). United States of America: Pearson Education.
● Hopcroft, J., Motwani, R. & Ullman, J. (2007). Introduction To Automata
Theory, Languages, and Computation (3rd ed.). United States of America:
Pearson Education.
● Louden, K. (2012). Programming Languages: Principles and Practices (3rd
ed.). United States of America: Course Technology, Cengage Learning.
● Martin, J. (1991/2011). Introduction to Languages and Computation Theory
(4th ed.). United States of America: McGraw Hill.

También podría gustarte