aplicaciones de las er

Upload: donato-aquino

Post on 07-Oct-2015

7 views

Category:

Documents


0 download

DESCRIPTION

f

TRANSCRIPT

Manual de Prcticas

Lenguajes y Autmatas [SCB-1015]

LENGUAJES Y AUTOMATAS I

Alumnos:Jos Luis Morales Velzquez No. Control 117o1136Donato Aquino Barrios No. Control 117o1076

Profesor: Edgar Gustavo Ortz Lpezaplicacin de las expresiones regulares (ER) |pro

Ingeniera en Sistemas ComputacionalesAPLICASIN DE LAS EXPRESIONES REGULARES

INTRODUCCIN3

DESARROLLO4

EJEMPLOS DE APLICACIN8

CONCLUSIN16

BIBLIOGRAFA16

INTRODUCCINLasexpresiones regularesson un sistema cmodo, rpido y potente (una vez se domina) de realizar un filtrado sobre un determinado caso, y obtener un grupo ms reducido y especfico, excluyendo los resultados que no coincidan con elpatrndado. Siendo ms tcnicos, con ayuda de un modelo matemtico, llamadoDFA(Autmata Finito Determinista) se puede observar cmo se aceptaran las cadenas que casaran con la expresin regular equivalenteabc*. Partiendo del estado de arranque q0, podemos transitar al estado q1con el smboloay transitar al estado q2con el smbolobpara llegar a un estado de aceptacin (doble trazo) e incluso seguir transitando indefinidamente con el simboloc, lo que demostrara que las cadenaab,abc,abcc... entraran dentro de las cadenas que acepta.Una ER o Expresin Regular es un equivalente algebraico para un autmata. Utilizado en muchos lugares como un lenguaje para describir patrones en texto que son sencillos pero muy tiles. Pueden definir exactamente los mismos lenguajes que los autmatas pueden describir: Lenguajes regulares. Ofrecen algo que los autmatas no: Manera declarativa de expresar las cadenas que queremos aceptar.Dado un alfabeto Dado un alfabeto , una expresin regular sobre expresin regular sobre se define de forma recursiva: ER primitivas:, , {a | a} Si y son ER, entonces son tambin ER: + (unin), (concatenacin), * (cierre), (). No existen otras reglas para la construccin de ER sobre .DESARROLLOLa potencia de lasexpresiones regulareses increblementeamplia. Suele ser especialmente til para losprogramadores y manejadores de bases de datos (PHP,Perl, Java, .NET...), que pueden desarrollar y reconocer patrones complejos de una forma sencilla.Las expresiones regulares tienen mltiples utilidades, no solo se utilizan en los lenguajes de programacin sino tambin en el mbito de la lingstica de corpus y de la lingstica computacional. Si no eres programador tambin puedes hacer uso de lasexpresiones regularespara multitud de tareas. Muchas aplicaciones utilizanexpresiones regularesy seguro que no tenas ni una idea, por ejemplo:Bloc de notas: Aunque no el base de Windows, sinonotepad2. Especialmente til para reemplazar cadenas en textos en los que estn repetidos varias veces (ficheros HTML, de texto etc.).Comandos UNIX: Comandos de administrador de sistemas comogrep,egrep,awk,sedy tantos otros. Recuerda que si usas Windows, puedes utilizar muchos de estos comandos con UNIXUtils.Renombrado masivo: Existen multitud de programas para renombrar ficheros utilizando expresiones regulares comoRegEx Renamer.Emule: El mismsimoemulepermite realizar busquedas con un grupo reducido de expresiones regulares, por ejemplo si queremos buscar canciones que empiecen porSpectrum(para buscar de este grupo musical), podemos escribir^Spectrumy especificar ficheros de audio, evitando asi canciones que tengan el nombreSpectrumen su ttulo. Adems enPreferencias / Opciones adicionales / Mostrar ms controles (Controles de modo avanzado)puedes activar las expresiones regulares para filtrar categoras en las pestaas de trfico.Renombrado de MP3: ConQuick File Rename, se mezcla la potencia de las expresiones regulares a la capacidad de utilizar los tag ID3 para renombrar tus archivos.

Las expresiones regulares denotan lenguajes.Por ejemplo, la expresin regular: 01* + 10* denota todas las cadenas que son o un 0 seguido de cualquier cantidad 1's o un 1 seguida de cualquier cantidad de 0's.Las operaciones que realizan los lenguajes son:Unin o Alternativa:Consideremos dos lenguajes diferentes definidos sobre el mismo alfabeto L1W() y L2W(). Se denomina unin de ambos lenguajes al lenguaje formado por las palabras de ambos lenguajes: L1 U L2={ x | xL1 xL2}Concatenacin:Consideremos dos lenguajes definidos sobre el mismo alfabeto, L1 y L2. La concatenacin o producto de estos lenguajes es el lenguaje L1 L2= { xy / xL1 y xL2} Las palabras de este lenguaje estarn formadas al concatenar cada una palabra del primero de los lenguajes con otra del segundo.La concatenacin de lenguajes con el lenguaje vaci esL = L = Potencia de un lenguaje:Se define la potencia i-sima de un lenguaje a la operacin de concatenarlo consigo mismo i veces. Li= LLL ....L |------------| iClausura positiva de un lenguaje:Se define la clausura positiva de un lenguaje L: L + = U L i i=1Lenguaje obtenido uniendo el lenguaje con todas sus potencias posibles excepto L. Si L no contiene la palabra vaca, la clausura positiva tampocoCierre o Clausura de un lenguaje:Se define el cierre o clausura de un lenguaje L como : L* = U Li i=0Lenguaje obtenido uniendo el lenguaje con todas sus potencias posibles, incluso L. Todas las clausuras contienen la palabra vaca.Existen tres operaciones bsicas que se pueden realizar sobre las ER: Seleccin de alternativas :Se indica con el operador |(barra vertical). Si r y s son ER, entonces r | s es una ER que define a cualquier cadena que concuerde con una r o una s, tambin se dice que r | s , es la unin de los lenguajes de r y s y lo podemos definir: L( r | s ) = L( r ) U L( s ). Esta operacin se puede extender a ms de dos ER. Concatenacin:Se indica con la yuxtaposicin de las ER. Si r y s son ER, entonces rs es una ER que define a cualquier cadena que concuerde con la concatenacin de r y s , esta operacin la podemos definir: L(rs) = L(r)L(s).Esta operacin se puede extender a ms de dos ER. Repeticin o Cerradura:Tambin se conoce con el nombre de cerradura de Kleene. Se indica con el operador*. Si r es una ER, entonces r* es una ER que define a las cadenas de caracteres representadas por la concatenacin repetida de r en n veces, o sea que lo podemos definir como: L(r*) = L(r)*o tambin lo podemos definir como la unin infinita de conjuntos r :r* n = r 0 r 1 r 2...r n.Para los programadores o aquellas personas asociadas a mundo de la tecnologa, en una operacin normal de bsqueda y reemplazo es necesario proporcionar el texto exacto para que coincida con los resultados deseados.Aunque esta tcnica puede ser adecuada para tareas de bsqueda y reemplazo sencillas de texto esttico, carece de flexibilidad y hace cuando menos difcil, si no imposible, la bsqueda de texto dinmico.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 nmero de telfono o de nmero de tarjeta de crdito aparece dentro de la cadena.Esto se denomina validacin de datos. Reemplazar texto.Puede utilizar una expresin regular para identificar el texto especfico de un documento y quitarlo o reemplazarlo con otro texto. Extraer una subcadena de una cadena en funcin de la coincidencia del modelo.Puede buscar texto especfico 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 expresin 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 continuacin, puede utilizar una expresin regular para quitar el material obsoleto.Por ltimo, puede utilizar una expresin regular para buscar y reemplazar las etiquetas.Una expresin regular tambin es til en un lenguaje como JScript o C, que no se distinguen por su capacidad de controlar cadenas.En GNU, no se distinguen expresiones regulares bsicas de extendidas; los comandos aceptan todas las expresiones regulares. En ese caso, como siempre se estn usando extendidas, los metacaracteres ?, +, {, |, (, y ) deben ser escapados cuando se quieren usar como caracteres normales, escribiendo \?, \+, \{, \|, \(, y \).

EJEMPLOS DE APLICACINEjemplo 1: Bsqueda de imgenes en la PC.Si tenemos varias carpetas, con miles y miles de imgenes con distintos nombres y formatos (JPG, PNG, GIF...) y nos interesa separar todas las fotografas en las que aparece Ramn (ramon_borracho.jpg, ramon45.jpg, ramon_de_viaje.bmp, etc.).La primera opcin que se nos ocurre es hacerlo de forma manual, cosa que nos consumira demasiado tiempo si se trata de ms de, por ejemplo,5.000fotografas.La siguiente opcin es utilizar los comodines (wildcards): Utilizando los comodines*(cualquier conjunto de caracteres) y?(cualquier carcter, slo uno), podemos obtener ms precisin de una forma sencilla:ramon*.jpg, ramon*.???, *ramon*.*, ...). En estos casos, la potencia de los comodines suele ser suficiente.Sin embargo, el mtodo anterior es limitado, puesto que, si quisieramos detectar fotografas con nombres comoramn.jpg, r4m0n.jpg, raaamoncito.jpegpero no incluirromn.jpg, romn.jpg y slo incluir imagenes con formato jpgno habra forma de discriminar entre ambas opciones, salvo utilizando una expresin regular:^.*ra|4m(o|0|)n.*\.jpg$.Ejemplo 2: Para describir el lxico de un lenguaje de programacinPor ejemplo para el lenguaje C++:Palabras Claves = main + if + else + while + do + switch + case +... Dgitos = 1+2+3+4+5+6+7+8+9 Nmero Entero Sin Signo = 0+Dgitos.(Dgitos+0)* Letra = a + b + c + d+... + z Identificador = (Letra+ _) . (Letra+ _ + Dgitos+0)*

Ejemplo 3: Expresiones Regulares en el lenguaje Ingls.Forma incorrecta: * I think that to buy weaponsForma correcta: I think that buying weaponsLa expresin regular utilizada para detectar el error es: \sthink\sthat\sto\sEste es un error frecuente cometido por hispanohablantes. El verbo think seguido de una oracin subordinada suele ir acompaado por un vervo en gerundio y no por un verbo en infinitivo como to. Es un ejemplo que slo encuentra una secuencia, es decir, en esta ocacin la expresin regular descrita anteriormente detectar nicamente nicamente una secuencia en la que aparecern las palabras indicadas. Sin embargo, se trata de un ejemplo muy til por tratarse de una confusin muy ferecuente, y su inclusin en el corrector gramatical resulta muy pertinente.

Ejemplo 4: Coincidencia de palabras.Coincidencia solo con la palabra completa

Ejemplo de usoCoincidencia con la palabraintil; no coincide contil,tilmente,utilidad, etc.

Ejemplo de regex(\W|^)intil(\W|$)

Notas \Wcoincide con cualquier carcter que no sea una letra, un nmero o un guin bajo. Impide que la expresin regex coincida con letras que precedan o que sigan a la palabra.Importante:al crear una expresin regex para que coincida con palabras completas, debes incluir la clase de carcter\Wpara evitar que se filtren mensajes legtimos. ^coincide con el inicio de una nueva lnea. Permite a la expresin regex coincidir con la palabra si aparece al principio de la lnea, sin ningn carcter que le preceda. $coincide con el final de una lnea. Permite a la expresin regex coincidir con la palabra si aparece al final de la lnea, sin ningn carcter que le siga.

Coincidencia solo con la frase exacta

Ejemplo de usoCoincidencia con la fraseconsejos mercados.

Ejemplos de regexEjemplo 1:(\W|^)consejos\mercados(\W|$)

Ejemplo 2:(\W|^)consejos\s{0,3}mercados(\W|$)

Ejemplo 3:(\W|^)consejos\s{0,3}mercado(s){0,1}(\W|$)

Notas \W coincide con cualquier carcter que no sea una letra, un nmero o un guin bajo. Impide que la expresin regex coincida con caracteres que precedan o que sigan a la frase. En el ejemplo 2, \s coincide con un carcter de espacio y {0,3} indica que pueden aparecer de cero a tres espacios entre las palabrasconsejosymercado. ^ coincide con el inicio de una nueva lnea. Permite a la expresin regex coincidir con la frase si aparece al principio de la lnea, sin ningn carcter que le preceda. $ coincide con el final de una lnea. Permite a la expresin regex coincidir con la frase si aparece al final de la lnea, sin ningn carcter que le siga. En el ejemplo 3, (s) coincide con la letras, y {0,1} indica que la letra puede aparecerunavez oningunadespus del trmino "mercado". Por lo tanto, la expresin regex coincide conconsejos de mercadoy conconsejos de mercados. Si lo prefieres, puedes utilizar el carcter ? en lugar de {0,1}.

Coincidencia con la palabra o con la frase de una lista

Ejemplo de usoCoincidencia con cualquier palabra o frase de la lista siguiente: tontera maldito caray caramba madre ma ostras

Ejemplos de regex(\W|^)(tontera|maldito|caray|caramba|madre\sma|ostras)(\W|$)

Notas (...) agrupa todas las palabras de modo que la clase de carcter \W afecta a todas las palabras del parntesis. \W coincide con cualquier carcter que no sea una letra, un nmero o un guin bajn. Impide que la expresin regex coincida con caracteres que precedan o sigan a las palabras o a las frases de la lista. ^ coincide con el inicio de una nueva lnea. Permite a la expresin regex coincidir con la palabra si aparece al principio de la lnea, sin ningn carcter que le preceda. $ coincide con el final de una lnea. Permite a la expresin regex coincidir con la palabra si aparece al final de la lnea, sin ningn carcter que le siga. | indica la disyuntiva o, para que la expresin regex coincida con cualquiera de las palabras de la lista. \s coincide con un carcter de espacio. Utilzalo para separar las palabras en una frase.

Coincidencia de una palabra con distintas grafas o con caracteres especiales

Ejemplo de usoCoincidencia con la palabra "viagra" y con algunas de las alteraciones que utilizan los emisores de spam, por ejemplo: vi@gra v1agra v1@gra v!@gr@

Ejemplo de regexv[i!1][a@]gr[a@]

Notas \W no se incluye, por lo que pueden aparecer otros caracteres antes o despus de las variaciones del trminoviagra. Por ejemplo, la expresin regex coincide igualmente conviagraen el texto siguiente:viagra!!o***viagra*** [i!1] coincide con los caracteresi,!, o1en la segunda posicin de carcter de la palabra.

Coincidencia de una palabra con caracteres de variables

Ejemplo de usoCoincidencia con cualquier URL que contenga el texto correonoadmitido.com, por ejemplo:

correonoadmitido1.com correonoadmitido12.com correonoadmitido3.com correonoadmitido.basura.com correonoadmitido-basura.com

Ejemplo de regexcorreonoadmitido(\w.+%\-){0,25}\.com

Notas [\w.+\-] coincide con cualquier carcter (a-z,A-Z,0-9o guin bajo), una coma, un signo ms, un signo de porcentaje o un guin. Son los nicos caracteres vlidos en una URL. Ten en cuenta que el carcter \- (que indica un guin) debe ir al final de la lista de caracteres dentro de los corchetes. {0,25} indica que, en el conjunto de caracteres anterior, puede haber entre 0 y 25 caracteres despus del textocorreonoadmitido. La configuracin de correo relacionada con el cumplimiento del contenido admite la coincidencia de hasta 25 caracteres para cada conjunto de caracteres en una expresin regular. El carcter \ antes del guin y del punto acta de carcter de escape, es decir, indica que el guin y el punto no son caracteres especiales regex por s mismos. Ten en cuenta que no es necesario incluir un carcter de escape para el punto dentro de los corchetes.

Coincidencia con cualquier direccin de correo electrnico de un determinado dominio

Ejemplo de usoCoincidencia con cualquier direccin de correo electrnico de los dominiosyahoo.com,hotmail.comygmail.com.

Ejemplo de regex(\W|^)[\w.+\-]{0,25}@(yahoo|hotmail|gmail)\.com(\W|$)

Notas \W coincide con cualquier carcter que no sea una letra, un nmero o un guin baj. Impide que la expresin regex coincida con caracteres que precedan o que sigan a la direccin de correo electrnico. ^ coincide con el inicio de una nueva lnea. Permite a la expresin regex coincidir con la direccin si aparece al principio de la lnea, sin ningn carcter que le preceda. $ coincide con el final de una lnea. Permite a la expresin regex coincidir con la direccin si aparece al final de la lnea, sin ningn carcter que le siga. [\w.\-] coincide con cualquier carcter (a-z, A-Z, 0-9 o guin bajo), una punto, un signo ms o un guin. Estos son los caracteres vlidos ms utilizados en la primera parte de una direccin de correo electrnico. Ten en cuenta que el carcter \- (que indica un guin) debe ir al final de la lista de caracteres dentro de los corchetes. El carcter \ antes del guin y del punto acta de carcter de escape, es decir, indica que el guin y el punto no son caracteres especiales regex por s mismos. Ten en cuenta que no es necesario incluir un carcter de escape para el punto dentro de los corchetes. {0,25} indica que, en el conjunto de caracteres anterior, puede haber entre 0 y 25 caracteres antes del smbolo @. La configuracin de correo relacionada con el cumplimiento del contenido admite la coincidencia de hasta 25 caracteres para cada conjunto de caracteres en una expresin regular. El formato (...) agrupa los dominios, mientras que el carcter | que los separa indica la disyuntiva o.

Coincidencia con cualquier direccin IP de un intervalo de direcciones

Ejemplo de usoCoincidencia con cualquier direccin IP que se incluya en el intervalo192.168.1.0-192.168.1.255.

Ejemplos de regexEjemplo 1: 192\.168\.1\.Ejemplo 2: 192\.168\.1\.\d{1,3}

Notas El carcter \ antes de cada punto sirve de carcter de escape, es decir, indica que el punto no es un carcter especial regex por s mismo. En el ejemplo 1, no se incluye ningn carcter despus del ltimo punto, por lo que la expresin regex coincide con cualquier direccin IP que empiece por192.168.1., independientemente del nmero que le siga. En el ejemplo 2, \d coincide con cualquier cifra entre el0y el9despus del ltimo punto, y {1,3} indica que pueden aparecer entre uno y tres nmeros despus del ltimo punto. En este caso, la expresin regex coincide con cualquier direccin IP completa que empiece por192.168.1.. Ten en cuenta que esta expresin tambin coincide con direcciones IP no vlidas, por ejemplo,192.168.1.999.

Coincidencia con un formato alfanumrico

Ejemplo de usoCoincidencia con los nmeros de pedido de la empresa. Hay varios formatos posibles, por ejemplo:

PO nn-nnnnn PO-nn-nnnn PO# nn nnnn PO#nn-nnnn PO nnnnnn

Ejemplo de regex(\W|^)po[#\-]{0,1}\s{0,1}\d{2}[\s-]{0,1}\d{4}(\W|$)

Notas \W coincide con cualquier carcter que no sea una letra, un nmero o un guin bajo. Impide que la expresin regex coincida con caracteres que precedan o que sigan al nmero. ^ coincide con el inicio de una nueva lnea. Permite a la expresin regex coincidir con el nmero si aparece al principio de la lnea, sin ningn carcter que le preceda. $ coincide con el final de una lnea. Permite a la expresin regex coincidir con el nmero si aparece al final de la lnea, sin ningn carcter que le siga. [#\-] coincide con el smbolo de almohadilla o con un guin despus de las letras "po", mientras que {0,1} indica que uno de esos caracteres puede aparecer una vez o ninguna. Ten en cuenta que el carcter \- (que indica un guin) debe ir al final de la lista de caracteres dentro de los corchetes. \s coincide con un espacio, y {0,1} indica que puede aparecer un espacio una vez o ninguna. \d coincide con cualquier cifra del 0 al 9, y {2} indica que deben aparecer exactamente 2 dgitos en esta posicin en el nmero.

CONCLUSINComo han podido observar una expresin regular es una forma de representar a los lenguajes regulares (finitos o infinitos) y se construye utilizando caracteres del alfabeto sobre el cual se define el lenguaje. No solo los programadores utilizan las Expresiones Regulares, tambin aquellas personas que no lo son hacen el uso de estas aunque no se estn dando cuenta, todo esto debido a que las ER son un sistema cmodo, rpido y potente de realizar un filtrado sobre un determinado caso, y obtener un grupo ms reducido y especfico, excluyendo los resultados que no coincidan con el patrn dado, lo cual nos evita las mltiples operaciones y/o actividades que se tienen que realizar para llegar al resultado.Especficamente, las expresiones regulares se construyen utilizando los operadores unin, concatenacin y clausura de Kleene.

BIBLIOGRAFAFriedl, J.E.F. (2006). 3er. Ed. Mastering Regular Expressions. OReilly; USA.Kernighan-Pike[1987], Coffin[1989]https://msdn.microsoft.com/es-es/library/az24scfc%28v=vs.110%29.aspxhttp://www.ccg.unam.mx/~contrera/bioinfoPerl/node18.htmlhttps://support.google.com/analytics/answer/1034324?hl=eshttp://es.wikipedia.org/wiki/Expresi%C3%B3n_regular

Fecha: 14/02/2015Pgina 2