En esta publicación del blog, me gustaría compartir las últimas noticias y cambios realizados en las Expresiones Regulares en ABAP moderno, principalmente a partir de la versión 7.55 y 7.56 de OP.
Anteriormente, se utilizaban en ABAP las expresiones regulares en sintaxis POSIX o "Portable Operating System Interface for uniX". Por lo tanto, a partir de ahora, las expresiones regulares en sintaxis POSIX están
obsoletas
, por lo que el uso de este tipo de sintaxis de expresiones regulares conlleva una advertencia del chequeo de sintaxis. Aunque esto se puede ocultar con la pragma ##regex_posix, se recomienda encarecidamente migrar a otra sintaxis de expresiones regulares admitida por ABAP, como las expresiones regulares PCRE, XPath o XSD.
Resumen de RegEx
Las expresiones regulares, o regex como comúnmente se les llama, suelen ser complicadas e intimidantes para los nuevos usuarios. Antes de profundizar en las nuevas características, me gustaría dar una breve introducción sobre RegEx en general y presentar ejemplos escritos explícitamente en ABAP. Aquellos que sean expertos en este tema y puedan aburrirse, siéntanse libres de saltar esta sección.
El concepto de RegEx ha estado presente desde hace bastante tiempo. Se utiliza cuando se esperan patrones complejos. Como buscar números, letras, caracteres especiales o validar un correo electrónico, etc. Muchos problemas de búsqueda y reemplazo de texto son difíciles de manejar sin utilizar coincidencias de patrones de expresiones regulares. Además, en ABAP, una búsqueda utilizando una expresión regular es más potente que los patrones tradicionales de SAP. Tomemos este ejemplo simple:
FIND 'A' IN 'ABCD1234EFG'
MATCH COUNT sy-tabix.
WRITE: sy-tabix.
Ahora, si deseas encontrar todas las letras del alfabeto en la cadena sin usar RegEx y mediante un patrón de búsqueda normal, necesitas un bucle sobre las 26 letras. Usando RegEx, sería fácil buscar y encontrar las siete letras:
FIND ALL OCCURRENCES OF PCRE '[A-Z]' IN 'ABCD1234EFG'
MATCH COUNT sy-tabix.
WRITE: sy-tabix.
ABAP admite RegEx en las sentencias FIND y REPLACE y a través de las clases CL_ABAP_REGEX y CL_ABAP_MATCHER. La clase CL_ABAP_MATCHER aplica una expresión regular generada con CL_ABAP_REGEX a una cadena de caracteres o una tabla interna.
Las Expresiones Regulares generalmente están compuestas por símbolos y caracteres (literales). Intento cubrir algunos de los símbolos comúnmente utilizados en la tabla a continuación.
¿Ávido o Perezoso?
Otro concepto que puede resultar interesante conocer es el significado de los cuantificadores ávidos o perezosos en RegEx. En el modo ávido definido con (*, +, ...) un carácter cuantificado se repite tantas veces como sea posible