Está en la página 1de 6

MP 0485

Programación
DAM 1

Tema 8
Expresiones regulares
26/03/2023
Artur Fytsyk

Índice de Contenidos
• Definición

• Uso

• Funcionamiento

• Ejemplos

• Java

• Conclusiones

• Referencias
Definición
Las expresiones regulares, llamadas regex o regexp también, son unos patrones de texto
formados por caracteres literales, caracteres especiales y metacaracteres que representan
clases de caracteres o secuencias de caracteres. Esta secuencia de caracteres se utiliza para
identificar ocurrencias de cadenas de texto que coinciden con el patrón definido por la
expresión regular. Fueron creados por el matemático estadounidense Sthephen Cole Kleen en
la década de 1950.

Uso
Se usan normalmente para realizar búsquedas y reemplazos de texto en grandes conjuntos de
datos o archivos. También, se implementan en la validación y procesamiento de entradas de
usuario en aplicaciones de varios tipos.

Las expresiones regulares son ampliamente utilizadas en la identificación de ocurrencias de


texto, lo que se refiere a buscar patrones específicos en un texto o documento. Esto puede
incluir la identificación de palabras clave, fechas, direcciones de correo electrónico, URLs,
números de teléfono y otros tipos de información.

Al ser un componente vital en la programación se usa en la mayoría de lenguajes, aunque sí es


cierto que aparece también en herramientas de procesamiento de textos.

Para concretar sus funcionalidades, las expresiones regulares sirven para una búsqueda
precisa de patrones de texto, patrones específicos, patrones con reglas, patrones gramaticales,
extracción de información de texto estructurado y reemplazo de patrones.

Funcionamiento
En cuanto a su función teórica se basa en la teoría de lenguajes formales y autómatas. Los
lenguajes formales tratan sobre el estudio de los lenguajes, es decir, conjuntos de cadenas de
caracteres que siguen reglas sintácticas. Y los lenguajes formales, se definen como el conjunto
de reglas que especifican cómo se pueden construir las cadenas del lenguaje.

Las expresiones regulares siguen un modelo matemático abstracto de un sistema que procesa
una entrada en una secuencia de pasos, llamado autómata. Estos pueden ser de varios tipos,
los finitos deterministas (ADF), los finitos no deterministas (AFND), los de pila y las máquinas
de Turing. Cada uno tiene sus capacidades y limitaciones en cuanto a procesar lenguajes.
Teniendo en cuenta estos tipos las expresiones regulares son un autómata finito determinista
o no determinista regular.

Este autómata, se puede utilizar para procesar una cadena de entrada y determinar si esa
cadena cumple con la secuencia especificada por la expresión regular. El proceso de desarrollo
de la cadena se realiza siguiendo las transiciones del autómata desde el estado inicial hasta un
estado de aceptación. Si la cadena termina en un estado de aceptación, entonces se considera
que la cadena cumple con el patrón especificado por la expresión regular.
Ejemplos
Para entender de una forma más práctica las expresiones regulares, aquí unos ejemplos:

1. En la validación de correos electrónicos.

Por ejemplo se podría usar "^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$" donde “^”


significa el inicio del patrón, “[a-zA-Z0-9_.+-]+” es la búsqueda de una cadena que puede
tener letras de “a” a la “z”, tanto minúsculas como mayúsculas incluyendo caracteres
especiales “_.+- ” y los dígitos entre "0" y "9". Esta condición se aísla con unos “[ ]” para
separarla de otras y tomarla de una forma más compleja. Luego, tenemos un “+” al terminar la
primera condición, esto significa que pueden haber uno o más caracteres que cumplan la
condición anterior. Más tarde, tenemos el carácter “@” el cual nos indica que debe de haber un
carácter como este entre el primer patrón y el siguiente patrón si hubiese. A continuación,
tenemos dos patrones parecidos. “[a-zA-Z0-9-]+\. ” a diferencia de la primera condición solo
permite como carácter especial el ¨-¨ . Y este patrón sabemos que se refiere al dominio como
“gmail” porque al terminar es una condición estricta que señala que debe de haber un punto
separador entre las cadenas con la expresión “\.” . Finalmente, [a-zA-Z0-9-.]+$, tiene como
diferencia, el permiso de dos caracteres especiales “-.”. Este finaliza con un dólar indicando el
final de la expresión regular.

Si quisieramos solo permitir emails solo con dominio “gmail.com” tendriamos que dejar la
primera condición como esta, pero las siguientes cambiarlas por una cadena literal que
tendría, “gmail.com”.

2. Búsqueda y reemplazo de patrones en un texto

En programación es habitual cambiar el nombre de una variable por varios motivos. Por lo
general, esto ocurre cuando ya hemos escrito esa variable varias veces en el código. Esto nos
genera un problema ya que tendríamos que cambiar todos esas coincidencias manualmente,
pero gracias a las expresiones lo podemos solucionar con poner la palabra que queremos
cambiar, por ejemplo “número” y la palabra que debería estar en cambio, por ejemplo
“numeroString”, esto cambiaría todas las ocurrencias y facilitaría muchisimo el trabajo
relativamente a la escala del trabajo.

3. Validación de contraseñas

Si quisiéramos una contraseña de al menos 9 caracteres y con una letra y número como
mínimo, entonces podríamos usar la siguiente expresión:

"^(?=.[A-Za-z])(?=.\d)[A-Za-z\d]{9,}$"

Ya sabemos varias cosas con el ejemplo anterior pero en esta nueva expresiones aparecen
nuevas secuencias lógicas. Una de ellas es la “?=” conocida como búsqueda positiva hacia
delante o positive lookahead, es decir, que se desea hacer coincidir una subcadena solamente si
está seguida por otro patrón específico. Luego, tenemos el patrón “\d” que se refiere a
caracteres numéricos. Y también, “{9,}” el cual nos indica que como mínimo deben de haber 9
caracteres.
4. Análisis de logs

Otro sitio donde los regex son usados bastante es en servidores web o de sistemas. Por
ejemplo, se podría utilizar una expresión regular para buscar y contar todas las solicitudes
HTTP exitosas en un registro log.

Java
Ya que en este curso estamos dando el lenguaje java, explicaré algunas funciones y ejemplos
donde se usen estos métodos.

Pattern.compile(): Este método procesa una expresión para buscar coincidencias de texto.

Matcher.matches(): Busca coincidencias según la expresión y devuelve true. En el caso del


primer ejemplo, se podría usar este método de la siguiente manera:

En el caso del ejemplo de la validación de contraseñas se podría usar de la siguiente forma:

Matcher.find(): Devuelve true si encuentra una coincidencia parcial o completa en cualquier


parte de la cadena.

Matcher.group(): Devuelve la subcadena de la cadena que coincide con la expresión.

Matcher.replaceAll(): Reemplaza todas las ocurrencias de la expresión en la cadena de texto


con la cadena de reemplazo dada. En el ejemplo dos, que hemos comentado anteriormente, se
podría usar este método de la siguiente manera:
Conclusiones
En definitiva, las expresiones regulares son una herramienta muy poderosa y vital para la
manipulación e identificación de cadenas de texto. A su vez hemos demostrado que se usa en
variedad de aplicaciones, validaciones de entradas de formularios web hasta búsquedas y
análisis de grandes conjuntos de datos. También, hemos visto su funcionamiento teórico y
práctico en el que explicamos cómo funciona cada secuencia lógica con ejemplos en java,
aunque su uso no cambiaría mucho en otros lenguajes. En resumen, las expresiones regulares
son un utensilio de gran importancia en el desarrollo de tecnología y el hecho de que se haya
desarrollado, hace 30 años aproximadamente, y siga siendo muy útil nos da a entender que se
seguirá usando y evolucionando por mucho tiempo.

Referencias
- https://docs.python.org/3/howto/regex.html
- https://www.regular-expressions.info/
- https://es.wikipedia.org/wiki/Expresi%C3%B3n_regular

También podría gustarte