Vous êtes sur la page 1sur 15

|pro

Profesor: Edgar Gustavo Ortz Lpez

APLICACIN DE LAS EXPRESIONES


REGULARES (ER)

LENGUAJES Y AUTOMATAS
I SISTEMAS
INGENIERA EN
COMPUTACIONALES

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

INTRODUCCIN

Lenguajes y Autmatas [SCB-1015]

Las expresiones regulares son 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
el patrn dado.
Siendo ms tcnicos, con ayuda de un modelo matemtico, llamado DFA (Autmata Finito Determinista) se puede observar
cmo se aceptaran las cadenas que casaran con la expresin regular equivalente abc*.

Partiendo del estado de arranque q0, podemos transitar al estado q1 con el smbolo a y transitar al estado q2 con el
smbolo b para llegar a un estado de aceptacin (doble trazo) e incluso seguir transitando indefinidamente con el simbolo c,
lo que demostrara que las cadena ab, 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 .

Fecha: 14/02/2015

Pgina 2

DESARROLLO

Lenguajes y Autmatas [SCB-1015]

La potencia de las expresiones regulares es increblemente amplia. Suele ser especialmente til para los programadores 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 las expresiones regulares para multitud de tareas. Muchas
aplicaciones utilizan expresiones regulares y seguro que no tenas ni una idea, por ejemplo:
Bloc de notas: Aunque no el base de Windows, sino notepad2. 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 como grep, egrep, awk, sed y 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 como RegEx
Renamer.
Emule: El mismsimo emule permite realizar busquedas con un grupo reducido de expresiones regulares, por ejemplo si
queremos buscar canciones que empiecen por Spectrum (para buscar de este grupo musical), podemos
escribir ^Spectrum y especificar ficheros de audio, evitando asi canciones que tengan el nombre Spectrum en su ttulo.
Adems en Preferencias / 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: Con Quick 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.
Fecha: 14/02/2015

Pgina 3

Las operaciones que realizan los lenguajes son:

Lenguajes y Autmatas [SCB-1015]

Unin o Alternativa: Consideremos dos lenguajes diferentes definidos sobre el mismo alfabeto L1 W() y L2 W(). Se
denomina unin de ambos lenguajes al lenguaje formado por las palabras de ambos lenguajes:

L1 U L2={ x | x L1 x L2}

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 / x L1 y x L2} 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 es L = 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
|------------|
i
Clausura positiva de un lenguaje: Se define la clausura positiva de un lenguaje L:

L+=ULi
i=1
Lenguaje obtenido uniendo el lenguaje con todas sus potencias posibles excepto L. Si L no contiene la palabra vaca, la
clausura positiva tampoco
Cierre o Clausura de un lenguaje: Se define el cierre o clausura de un lenguaje L como :

L* = U Li
i=0
Lenguaje 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

Fecha: 14/02/2015

Pgina 4

Lenguajes y Autmatas [SCB-1015]

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.

Fecha: 14/02/2015

Pgina 5

Lenguajes y Autmatas [SCB-1015]

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 \).

CONCLUSIN
Como 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.

Fecha: 14/02/2015

Pgina 6

BIBLIOGRAFA

Lenguajes y Autmatas [SCB-1015]

Friedl, 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.aspx
http://www.ccg.unam.mx/~contrera/bioinfoPerl/node18.html
https://support.google.com/analytics/answer/1034324?hl=es
http://es.wikipedia.org/wiki/Expresi%C3%B3n_regular

EJEMPLOS DE APLICACIN
Ejemplo 1: Bsqueda de imgenes en la PC.
Si tenemos varias carpetas, con miles y miles de imagenes 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.000 fotografas.
La siguiente opcin es utilizar los comodines (wildcards): Utilizando los comodines * (cualquier conjunto de carcteres) 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 como ramn.jpg, r4m0n.jpg,
raaamoncito.jpeg pero no incluir romn.jpg, romn.jpg y slo incluir imagenes con formato jpg no 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 programacin
Por 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
Fecha: 14/02/2015

Pgina 7

Identificador = (Letra+ _) . (Letra+ _ + Dgitos+0)*

Lenguajes y Autmatas [SCB-1015]

Ejemplo 3: Expresiones Regulares en el lenguaje Ingls.


Forma incorrecta: * I think that to buy weapons
Forma correcta: I think that buying weapons
La expresin regular utilizada para detectar el error es: \sthink\sthat\sto\s
Este 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.

Coincidencia solo con la palabra completa


Ejemplo de

Coincidencia con la palabra intil; no coincide con til, tilmente, utilidad, etc.

uso
Ejemplo de

(\W|^)intil(\W|$)

regex
Notas

\W coincide 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 \W para 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.

Fecha: 14/02/2015

Pgina 8

Lenguajes y Autmatas [SCB-1015]

Coincidencia solo con la frase exacta


Ejemplo

Coincidencia con la frase consejos mercados.

de uso
Ejemplos

Ejemplo 1: (\W|^)consejos\mercados(\W|$)

de regex
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 palabras consejos y mercado.

^ 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 letra s, y {0,1} indica que la letra puede aparecer una vez
oninguna despus del trmino "mercado". Por lo tanto, la expresin regex coincide con consejos de
mercado y con consejos de mercados. Si lo prefieres, puedes utilizar el carcter ? en lugar de {0,1}.

Fecha: 14/02/2015

Pgina 9

Lenguajes y Autmatas [SCB-1015]

Coincidencia con la palabra o con la frase de una lista


Ejemplo de

Coincidencia con cualquier palabra o frase de la lista siguiente:

uso

Ejemplos

tontera
maldito
caray
caramba
madre ma
ostras

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

de regex
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.

Fecha: 14/02/2015

$ coincide con el final de una lnea. Permite a la expresin regex coincidir con la palabra si aparece al

Pgina 10

Lenguajes y Autmatas [SCB-1015]

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

Coincidencia con la palabra "viagra" y con algunas de las alteraciones que utilizan los emisores de spam, por

uso

ejemplo:

Ejemplo de

vi@gra
v1agra
v1@gra
v!@gr@

v[i!1][a@]gr[a@]

regex
Notas

\W no se incluye, por lo que pueden aparecer otros caracteres antes o despus de las variaciones del
trmino viagra. Por ejemplo, la expresin regex coincide igualmente con viagra en el texto siguiente:

viagra!! o ***viagra***

Fecha: 14/02/2015

[i!1] coincide con los caracteres i, !, o 1 en la segunda posicin de carcter de la palabra.

Pgina 11

Lenguajes y Autmatas [SCB-1015]

Coincidencia de una palabra con caracteres de variables


Ejemplo

Coincidencia con cualquier URL que contenga el texto correonoadmitido.com, por ejemplo:

de uso

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

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

[\w.+\-] coincide con cualquier carcter (a-z, A-Z, 0-9 o 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
texto correonoadmitido. 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.

Fecha: 14/02/2015

Pgina 12

Lenguajes y Autmatas [SCB-1015]

Coincidencia con cualquier direccin de correo electrnico de un determinado dominio


Ejemplo

Coincidencia con cualquier direccin de correo electrnico de los

de uso

dominios yahoo.com, hotmail.com ygmail.com.

Ejemplo

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

de regex
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.

Fecha: 14/02/2015

El formato (...) agrupa los dominios, mientras que el carcter | que los separa indica la disyuntiva o.

Pgina 13

Lenguajes y Autmatas [SCB-1015]

Coincidencia con cualquier direccin IP de un intervalo de direcciones


Ejemplo

Coincidencia con cualquier direccin IP que se incluya en el intervalo 192.168.1.0 - 192.168.1.255.

de uso
Ejemplos

Ejemplo 1: 192\.168\.1\.

de regex

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 por 192.168.1., independientemente del nmero que le
siga.

En el ejemplo 2, \d coincide con cualquier cifra entre el 0 y el 9 despus 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 por 192.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

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

de uso
Fecha: 14/02/2015

Pgina 14

Lenguajes y Autmatas [SCB-1015]

Ejemplo

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

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

de regex
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.

Fecha: 14/02/2015

Pgina 15

Vous aimerez peut-être aussi