Documente Academic
Documente Profesional
Documente Cultură
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.
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:
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.
Este conjunto se denomina lenguaje generado por la expresión regular y se escribe como
L(r).
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
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.
� = {�} ∪ � ∪ �� ∪ ��� ∪ …
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
(� = {�}. )
Una vez analizado se define la operación de repetición para expresiones regulares como:
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.
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)*
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.
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:
Ejemplo: [a-z]
• Subexpresión opcional
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:
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 unión: Como su nombre lo dice es unir en un solo conjunto los símbolos que se
encuentran en los demás conjuntos.
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 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.
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.
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.
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.
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