Sei sulla pagina 1di 11

EXPRESIONES

REGULARES

1. Curso: Compiladores e Intérpretes.


2. Docente: Luis Reyes Lezcano.
Integrantes: Gonzales Siesquen Alex.
Quiñones Céspedes Xena Dayán Yuriko.
Vilchez Sanchez Osskhar.

Lambayeque – Perú
2017
EXPRESIONES REGULARES
1. Explique el fundamento matemático de las expresiones regulares reglas básicas y
ejemplos de su funcionamiento:
Una expresión es una combinación de constantes, variables, operadores y funciones
de acuerdo con reglas sintácticas precisas.
Las expresiones regulares son importantes porque también pueden ser consideradas
como un lenguaje de programación, que nos permite realizar acciones importantes
como las de búsqueda de elementos en los compiladores (Errores como la falta de
signos de puntuación o palabras reservadas mal escritas). Las expresiones regulares
están directamente relacionadas con los autómatas finitos determinísticos y no
determinísticos, y en muchas ocasiones son empleadas para describir componentes de
software debido a que son más fáciles de entender que los autómatas finitos.
Es importante denotar que los operadores en las expresiones regulares y en las
expresiones regulares conservan cierta precedencia dada de la siguiente forma:

- El operador * tiene la mayor precedencia, se aplica solo a la secuencia


más pequeña de símbolos a su izquierda que constituyen una expresión
regular bien formada.
- El siguiente en precedencia es el operador concatenación; una vez aplicados todos los
* aplicamos la concatenación.
- Por último, se aplican los operadores de unión.

Metacaracteres
La construcción de expresiones regulares depende de la asignación de significado
especial a algunos caracteres. En el patrón aba*.txt el carácter * no vale por sí mismo,
como el carácter asterisco, sino que indica un "conjunto de caracteres cualesquiera".
Asimismo, el carácter ? no se interpreta como el signo de interrogación, sino que
representa "un carácter cualquiera y uno solo". Estos caracteres a los que se asigna
significado especial se denominan "metacaracteres".
El conjunto de metacaracteres para expresiones regulares es el siguiente:
\^$.[]{}|()*+?

En la tabla siguiente se describen algunos de los caracteres especiales más comunes


que deben utilizarse en las expresiones regulares. Los caracteres se clasifican según las
categorías que se indican a continuación:
Caracteres Descripción
Anclajes
^ (acento circunflejo) Coincide con el principio de la línea o de la cadena de texto
que se busca mediante la expresión regular. Por ejemplo, una regla de
contenido con una línea de asunto de ubicación y la siguiente expresión
regular:
^abc
obtiene todos los mensajes de correo electrónico cuya línea de asunto empiece
por las letras abc
$ (dólar) Coincide con el final de la línea o de la cadena de texto que se busca
mediante la expresión regular. Por ejemplo, una regla de contenido con una
línea de asunto de ubicación y la siguiente expresión regular:
xyz$
obtiene todos los mensajes de correo electrónico cuya línea de asunto termine
en las letras xyz
Metacaracteres
. (punto) Coincide con cualquier carácter individual, excepto con los de una línea
nueva.
| (barra vertical) Indica alternativa; es decir, la disyuntiva "o". Por ejemplo:
gato|perro coincide con la palabra gato o con perro.
\ Indica que el carácter siguiente es literal y no especial. Por ejemplo:
\. coincide únicamente con un punto y no con cualquier carácter (puntos
suspensivos)
Clases de caracteres
[...] Coincide con cualquiera de los caracteres del conjunto especificado. Separa el
primer y el último carácter con un guion. Por ejemplo:
[123] coincide con los números 1, 2 o 3.

[a-f] coincide con cualquier letra de la a a la f.


Nota: En las políticas de cumplimiento del contenido, las expresiones regulares
distinguen entre mayúsculas y minúsculas.
[^...] Coincide con cualquier carácter que no se incluya en el conjunto de caracteres
especificado. Por ejemplo:
[^a-f] coincide con cualquier carácter que no sea una letra comprendida entre
la a y la f.
Nota: En las políticas de cumplimiento del contenido, las expresiones regulares
distinguen entre mayúsculas y minúsculas.
[:alnum:] Coincide con caracteres alfanuméricos (letras o cifras):
a-z, A-Z o 0-9
Nota: Esta clase de caracteres debe delimitarse con otro conjunto de corchetes
cuando se utiliza en una expresión regular, por ejemplo: [[:alnum:]].
[:alpha:] Coincide con caracteres alfanuméricos (letras):

a-z o A-Z

Nota: Esta clase de caracteres debe delimitarse con otro conjunto de corchetes
cuando se utiliza en una expresión regular, por ejemplo: [[:alpha:]].
[:digit:] Coincide con cifras:

0-9

Nota: Esta clase de caracteres debe delimitarse con otro conjunto de corchetes
cuando se utiliza en una expresión regular, por ejemplo: [[:digit:]].
[:graph:] Coincide únicamente con caracteres visibles, es decir, con cualquier carácter
excepto con espacios, caracteres de control, etc.

Nota: Esta clase de caracteres debe delimitarse con otro conjunto de corchetes
cuando se utiliza en una expresión regular, por ejemplo: [[:graph:]].
[:punct:] Coincide con caracteres de puntuación y con símbolos:

! " # $ % & ' ( ) * + , \ -. / : ; < = > ? @ [ ] ^ _ ` { | }

Nota: Esta clase de caracteres debe delimitarse con otro conjunto de corchetes
cuando se utiliza en una expresión regular, por ejemplo, [[:punct:]].
[:print:] Coincide con caracteres visibles y con espacios.

Nota: Esta clase de caracteres debe delimitarse con otro conjunto de corchetes
cuando se utiliza en una expresión regular, por ejemplo: [[:print:]].
[:space:] Coincide con todos los caracteres de espacio en blanco, incluidos los espacios,
las tabulaciones y los saltos de línea.

Nota: Esta clase de caracteres debe delimitarse con otro conjunto de corchetes
cuando se utiliza en una expresión regular, por ejemplo: [[:space:]].
[:word:] Coincide con cualquier carácter de una palabra, es decir, con cualquier letra,
cifra o con un guion bajo:

a-z, A-Z, 0-9 o _

Nota: Esta clase de caracteres debe delimitarse con otro conjunto de corchetes
cuando se utiliza en una expresión regular, por ejemplo: [[:word:]].
Clases de caracteres abreviados
Coincide con cualquier carácter de una palabra, es decir, con cualquier letra,
cifra o con un guion bajo:
\w
a-z, A-Z, 0-9 o _

Equivale a [:word:]
Coincide con cualquier carácter que no pertenezca a una palabra, es decir, con
\W cualquier carácter que no sea una letra, una cifra o un guion bajo.

Equivale a [^[:word:]]
Coincide con cualquier carácter de espacio en blanco. Por ejemplo, utiliza este
carácter para indicar un espacio entre las palabras de una frase:
\s
consejos\sútiles coincide con la frase sconsejos útiles

Equivale a [:space:]
Coincide con cualquier carácter que no sea un espacio en blanco.
\S
Equivale a [^[:space:]]
Coincide con cualquier cifra del 0 al 9 (ambos incluidos).
\d
Equivale a [:digit:]
Coincide con cualquier carácter que no sea una cifra del 0 al 9 (ambos
\D incluidos).

Equivale a [^[:digit:]]
Grupo
Agrupa partes de una expresión. Utiliza la función de agrupar para aplicar un
(...) cuantificador a un grupo o para hacer coincidir una clase de caracteres antes o
después del grupo.
Cuantificadores
Coincide con la expresión que le precede exactamente n veces. Por ejemplo:

{n} [a-c]{2} coincide con cualquier letra de la a a la c solo si hay dos letras en una
fila. De este modo, la expresión coincidiría con ab y ac, pero no con abc o
con aabbc.
Coincide con la expresión que le precede n veces como mínimo y m veces como
máximo. Por ejemplo:
{n,m}
[a-c]{2,4} coincide con cualquier letra de la a a la c solo si las letras tienen lugar
un mínimo de 2 veces y un máximo de 4 veces en una fila. De este modo, la
expresión coincidiría con ab y con abc, pero no con aabbc.
Indica que el carácter o la expresión que le precede puede coincidir una vez o
ninguna. Equivalente al intervalo {0,1}. Por ejemplo, la siguiente expresión
? regular:
colou?r

coincide con colour o color porque ? convierte la letra u en opcional.


Las expresiones regulares son entes formales o estructuras matemáticas utilizadas para
especificar parámetros de formación de componentes léxicos.
Las Expresiones Regulares denotan o representan lenguajes. Fueron desarrollados en los
años ’60 por Klene.

Se tienen las siguientes reglas E.R. para la representación del lenguaje,


definidas sobre ∑ = { a, b }

1. Sea a una expresión regular denota un lenguaje regular o una cadena.

2. Sea ab una expresión regular esta denota un lenguaje regular L(ab) = L(a) L(b) =
{a}{b} = {ab}
3. Sea a b una expresión regular esta denota un lenguaje regular L(a b) = L(a) ∪L(b)
= {a} ∪{b} = {a,b}
4. Sea a* una expresión regular esta denota un lenguaje regular L(a*) = L(a)* =
(L(a))* = ({a})* = {a}* = { Ɛ, a, aa, aaa, ...}
5. Sea a+ una expresión regular esta denota un lenguaje regular L(a+) = L(a) + =
(L(a)) + = ({a})+ = {a}+ = {a, aa, aaa, ...}
6. Sea Ɛ una expresión regular esta denota un lenguaje regular L( Ɛ ) = { Ɛ }
7. En general, sea ‘r’ una E.R. esta denota un L.R. L® siendo ‘r’ una E.R. compuesta
por las E.R. definidas previamente, se utilizan dichas reglas para obtener el
lenguaje asociado a ella (r).

Ejemplo:
Hallar los lenguajes asociados a las siguientes expresiones regulares:
3. De ejemplos de Lenguajes de Programación que utilicen directamente expresiones
regulares para validaciones de datos:
Es posible que haya escuchado que la palabra "OK" es la frase más reconocida a nivel
mundial en el mundo, en sí se encuentra en casi todos los idiomas hablados.
En el mundo de la programación, tenemos algo similar: expresiones regulares.
Las expresiones regulares, son herramientas poderosas que se usan para validar,
manipular y extraer datos del texto. La forma en que trabajan es mediante la definición
de un patrón que describe lo que se intenta encontrar. Este patrón es el "OK" del
mundo de la programación.

¿Cómo construir un patrón común?


Usaremos la siguiente expresión

"Expresiones regulares en 5 lenguajes diferentes"

Se usará un patrón para asegurar de que quede un número en el título. El texto con el
que se está trabajando se llama sujeto u objetivo. Podemos escribir un patrón de la
siguiente manera:
\d+
Este patrón coincidirá con uno o más dígitos entre 0 y 9. (El \ d representa un dígito, de
0 a 9 y el + se conoce como un cuantificador, y representa uno o más de los caracteres
anteriores). Ahora, desde allí hay más personajes en el título, por consiguiente:
.*\d+.*
Entonces ahora se lee así: cero o más caracteres seguidos de uno o más dígitos seguidos
de cero o más caracteres. (El. Es un comodín, el * cuantificador representa cero o más.)
Cada lenguaje de programación diferente ofrecerá una función o método para ejecutar
esta validación. A menudo se denomina algo en la línea de las coincidencias y devolverá
verdadero si el patrón coincide y falso si no.
Ahora sacaremos ese número para poder usarlo en otro lugar del programa. Puedes
hacer esto definiendo lo que se conoce como un grupo de captura. Crear uno es fácil.
Simplemente se rodeará la parte del patrón que le gustaría poder extraer con
paréntesis como este:
(\d+)
Este patrón es el mismo para todos los lenguajes de programación que implementan
expresiones regulares.

Ahora, cómo coinciden cada uno de estos idiomas diferentes y cómo extraer datos
usando expresiones regulares. Para cada uno de estos ejemplos, almacenaremos la
expresión en el título de la variable y lo usaremos como nuestro tema.
Ejemplo 1: Java
En Java, la clase String tiene un método llamado matches. Volverá verdadero si lo hace.
Java también tiene algunas clases de ayuda. A saber, java.util.regex.Pattern,que ayuda
a crear los patrones, y java.util.regex.Matcher, que es un ayudante para navegar y
mantener el estado de varias coincidencias.

String title = " Expresiones regulares en 5 lenguajes diferentes " ;

// Tenga en cuenta que tenemos que escapar del \ ya que es


un carácter de escape en Java
boolean result = title . coincidencias ( " \\ d + " );

// Para extraer el patrón


Patrón de patrón = Patrón . compilar ( " ( \\ d +) " );
Matcher matcher = patrón . coincidencia (título);
while (matcher . find ()) {
Sistema . a cabo . printf ( " Hay% s idiomas representados " ,
matcher . grupo ( 1 ));
}

Ejemplo 2: JavaScript

JavaScript también permite la creación de un objeto de Expresión regular utilizando el


estilo literal de barra diagonal.

var title = " Expresiones regulares en 5 lenguajes diferentes " ;

// Esto será verdadero o falso


var resultado = / . * \ d + . * / . prueba (título);

var match = / ( \ d + ) / . ejecutivo (título);


if (coincidencia) {
consola . log ( " Hay " , coincidencia [ 1 ], " idiomas representados " );
}

// Las cadenas también tienen una coincidencia. Esto es sinónimo de lo anterior.


var match = título . match ( / ( \ d + ) / );
Ejemplo 3: PHP

PHP tiene una función llamada preg_match . A pesar de cómo suena el nombre, no es
una función de resultado de prueba de paternidad.

$ title = " Expresiones regulares en 5 lenguajes diferentes ";


$ pattern = "~ (\\ d +) ~";

$ success = preg_match ($ patrón, $ título, $ partido);


if ($ success) {
echo "Hay". $ match [1]. "idiomas representados";
}

Ejemplo 4: DO#

El espacio de nombres System.Text.RegularExpressions es donde encontrará los


productos C #. Regex.Matches devuelve una colección vacía si no se encuentra la
coincidencia.

string title = " Expresiones regulares en 5 lenguajes diferentes " ;


patrón de cadena = @ "(\ d +)" ;

foreach ( Match match en Regex. Matches (título, patrón))


Consola. WriteLine ( " Hay {0} idiomas representados. " ,
Match.Groups [ 1 ] .Value);

Ejemplo 5: Groovy

Groovy , agrega algunos toques agradables en cuanto a la sintaxis. Utiliza el literal de


barra diagonal y el operador = ~. El emparejador devuelto aquí se puede utilizar de la
misma manera que en el ejemplo de Java anterior (porque, de hecho, es el mismo).

title = " Expresiones regulares en 5 lenguajes diferentes "


matcher = title = ~ / ( \ d +) /
matcher . encontrar()
printf ( " Hay% s idiomas representados " , grupo de matcher . ( 1 ))

Potrebbero piacerti anche