Índice
Introducción ...............................................................................................................................................1 2.1 Definición formal de una ER. ...........................................................................................................2 2.2 Operaciones ....................................................................................................................................4 2.3 Aplicaciones en problemas reales ...................................................................................................7 Conclusión ..................................................................................................................................................9 Referencias bibliográficas...........................................................................................................................10
Introducción
En esta investigación daré a conocer la definición de las expresiones regulares, sus operaciones y sus aplicaciones en problemas reales. Para empezar, una expresión regular describe una o más cadenas que deben coincidir al buscar en un cuerpo de texto. La expresión actúa como un modelo de caracteres que se compara con el texto que se busca. Es posible usar expresiones regulares para buscar modelos en una cadena, reemplazar texto y extraer subcadenas. 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. Si es la primera vez que te acercas al concepto de expresiones regulares (regex para abreviar) te animará saber que seguro que ya las has usado, aún sin saberlo, al menos en su vertiente más básica. Por ejemplo, cuando en una ventana ejecutamos dir *.* para obtener un listado de todos los archivos de un directorio, estamos utilizando el concepto de expresiones regulares, donde el patrón * coincide con cualquier cadena de caracteres.
1
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
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.
2
Una expresión regular r puede contener caracteres que tengan significados especiales (metacaracteres o metasímbolos)
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}.
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(ε) ={ε} 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(φ) = { }.
3
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
4
• 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.
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: 𝑆 ∗ = {𝜀} ∪ 𝑆 ∪ 𝑆𝑆 ∪ 𝑆𝑆𝑆 ∪ … Esta es una unión de conjuntos infinita, pero cada uno de sus elementos es una concatenación finita de cadenas de S. Descrito: 𝑎𝑠
𝑆∗ = ⋃ 𝑆𝑛 𝑛=0
Donde
𝑆 𝑛 = 𝑆, . . 𝑆
es
la
concatenación
de
S
por
n
veces
(𝑆 0 = {𝜀}. )
Una vez analizado se define la operación de repetición para expresiones regulares como:
5
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
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.
6
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
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 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.
7
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.
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. También hay esfuerzos importantes para tratar de representar cadenas como generadas por expresiones regulares o por lenguajes regulares.
8
Conclusión En una operación normal de búsqueda y reemplazo es necesario proporcionar el texto exacto para que coincida con los resultados deseados. Aunque esta técnica puede ser adecuada para tareas de búsqueda y reemplazo sencillas de texto estático, carece de flexibilidad y hace cuando menos difícil, si no imposible, la búsqueda de texto dinámico. Con las expresiones regulares, se puede:
Comprobar si existe un modelo dentro de una cadena. Por ejemplo, puede probar una cadena de entrada para ver si un modelo de número de teléfono o de número de tarjeta de crédito aparece dentro de la cadena. Esto se denomina validación de datos.
Reemplazar texto. Puede utilizar una expresión regular para identificar el texto específico de un documento y quitarlo o reemplazarlo con otro texto.
Extraer una subcadena de una cadena en función de la coincidencia del modelo. Puede buscar texto específico dentro de un documento o campo de entrada.
Por ejemplo, si necesita buscar en un sitio Web, quite el material obsoleto y reemplace alguna de las etiquetas de formato HTML. En este caso, puede utilizar una expresión regular para determinar si el material de las etiquetas de formato HTML aparece en cada archivo. Este proceso reduce la lista de archivos afectados a los archivos que contengan el material de destino que se desea quitar o cambiar. A continuación, puede utilizar una expresión regular para quitar el material obsoleto. Por último, puede utilizar una expresión regular para buscar y reemplazar las etiquetas. Una expresión regular también es útil en un lenguaje como JScript o C, que no se distinguen por su capacidad de controlar cadenas.
9
Referencias bibliográficas
Hopcroft John E., Introducción a la Teoría de Autómatas, Lenguajes y Computación, 2da ed, Ed. Addison Wesley, 2004. Kenneth C. Louden. (2004). Construcción de compiladores: principios y práctica. México: Thomson. Floria, D.. (2014). Lenguajes y Expresiones Regulares. Septiembre, 2016, de SlidePlayer Sitio web: http://slideplayer.es/slide/141462/ Labastida, Ma. (2013). Análisis Léxico. Septiembre. 2016, http://ingenieria.uatx.mx/labastida/files/2013/06/An%C3%A1lisis-l%C3%A9xico.pdf
de
Sitio
web:
10