Expresiones regulares, Programación Orientada a Objetos.




"Las expresiones regulares son un concepto en programación que solemos evitar, dada su aparente complejidad. Te aseguro que no es tan difícil." 
-Brais Moure
  • ¿Qué es una expresión regular? 

Las regex (en inglés, regular expressions) son las unidades de descripción de los lenguajes regulares, que se incluyen en los denominados lenguajes formales. Son un instrumento clave de la informática teórica, la cual, entre otras cosas, establece las bases para el desarrollo y la ejecución de programas informáticos, así como para la construcción del compilador necesario para ello. Es por esto que las expresiones regulares, también denominadas regex y basadas en reglas sintácticas claramente definidas, se utilizan principalmente en el ámbito del desarrollo de software.

Para cada regex existe un denominado autómata finito (también conocido como máquina de estado finito) que acepta el lenguaje especificado por la expresión y que, con ayuda de la construcción de Thompson, se desarrolla a partir de una expresión regular. Por otro lado, para cada autómata finito también hay una expresión regular que describe el lenguaje aceptado por el autómata. Este puede generarse bien con el algoritmo de Kleene o bien con la eliminación de estados.

  • ¿Por qué usar expresiones regulares? 

De cada línea del fichero habrá que extraer los distintos campos de información (fecha, hora, usuario y texto de cada mensaje). La mejor manera de extraer esta información es mediante el uso de expresiones regulares. Estas expresiones nos permiten definir patrones en los que Fundamentos de programación: JAVA pueden encajar distintos trozos de texto, y extraer información a partir de distintos trozos de la cadena que ha sido reconocida. Cada lenguaje de programación tiene pequeñas diferencias para tratar las expresiones regulares. En este el caso el patrón que describe la estructura de los mensajes es:

String RE = "(?\\d\\d?/\\d\\d?/\\d\\d?) ,? (?\\d\\d?:\\d\\d) - (?[^:]+): (?.+)";    

  • ¿Qué ventajas proporcionan las expresiones regulares para la validación de datos? 

Trabajar con instrucciones regex da margen para tomarse muchas libertades, pues siempre habrá varias soluciones posibles para cada tarea que se desee resolver con una expresión regular. El hecho de que el resultado deseado se pueda obtener de diferentes maneras, no obstante, no siempre se puede considerar una ventaja:

Para asegurar que se logrará el objetivo en todos los casos, pueden utilizarse instrucciones muy generales, pero, si se busca un resultado más exacto, entonces será inevitable formular un patrón regex específico. También vale la pena considerar la longitud: cuanto más compacta sea la expresión regular, menor será su tiempo de procesamiento. No obstante, no se debe descuidar la legibilidad. Si las instrucciones originales son demasiado complicadas y no tienen comentarios, modificarlas a posteriori es muy difícil.

Por lo general, para la creación de expresiones regulares se debe dar con la combinación perfecta entre compacidad y especificidad.


Descripción de la problemática: 

En la empresa KD-Electronics venden productos electrónicos y desean desarrollar un sistema de gestión de inventario. En el módulo de productos se debe realizar un CRUD, es decir, el registro (create) de nuevos productos en el inventario con su código de producto, nombre, descripción, precio base, precio de venta, categoría y cantidad disponible; así mismo, la actualización (update) de todos los campos, excepto el código del producto; en la parte de eliminación (delete) del producto, no se podrá eliminar físicamente y se debe permitir traer consultas (read) por código de producto.

  • Integre en su blog el caso planteado, indique los campos identificados que deben validarse y la solución con la expresión regular correspondiente. 
  • Valide que las expresiones regulares funcionen correctamente con aplicaciones en línea para tal fin, como regex101. 

    Campos por validarse:
  1. codigoProducto → "^[A-Z]{2,2}[0-9]{1,4}"g



  2. nombre → "^[a-zA-Z]+ [a-zA-Z]+ [a-zA-Z]+ [a-zA-Z]+$"g



  3. descripcion → "[a-zA-Z0-9..... \+\,\ñ\*]{0,100}"g


  4. precioBase → "^\$\d[0-9]+\.{1}\d[0-9]{1}"g




  5. precioVenta → "^\$\d[0-9]+\.{1}\d[0-9]{1}"g


  6. categoria → "^[a-zA-Z\s\d\']{0,20}"g


  7. cantidadDisponible → "^\d{0,5}"g



Referencias:
  • Toro, M. (2022). Fundamentos de programación: Java. Editorial Universidad de Sevilla.

  • Regex o expresiones regulares: la manera más sencilla de describir secuencias de caracteres. (2019, diciembre 30). IONOS Digital Guide; IONOS.
    https://www.ionos.es/digitalguide/paginas-web/creacion-de-paginas-web/regex/

  • Dib, F. (s/f). Regex101: Build, test, and debug regex. regex101. Recuperado el 21 de abril de 2024, de https://regex101.com/

  • Regular expressions cheat sheet by DaveChild. (s/f). Cheatography. Recuperado el 21 de abril de 2024, de https://cheatography.com/davechild/cheat-sheets/regular-expressions/



Programación Orientada a Objetos NRC-50425
Est. Carlos Andrés Pichón Acuña.
Ingeniería de Sistemas. 4to Cuatrimestre.
Corporación Universitaria Minuto de Dios.
Prof. Fabian Antonio Marino Riveros.
Abril 21, 2024



Comentarios