Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
REGULARES
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:
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:
\^$.[]{}|()*+?
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:
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
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.
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.
Ejemplo 2: JavaScript
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.
Ejemplo 4: DO#
Ejemplo 5: Groovy