
Este es el primero de una serie de seis blogs que describen cómo mejorar el probador de expresiones regulares conocido como Regex Toy, y cada blog describe una sola mejora de sus capacidades.
Nota: El uso de las palabras «mejorar» y «mejora» en la oración anterior no pretende sugerir que el SAP estándar Marco de mejora está involucrado en facilitar lo que se describe en esta serie de blogs. Además, por razones que se explicarán en el blog final, las mejoras discutidas en esta serie de seis blogs no se aplican a la versión 7.55 de NetWeaver (también conocida como CE 2008/OP 2020) y posteriores.
En 2015 escribí un E-bite para SAP PRESS titulado Regex en ABAP: Coincidencia de patrones con expresiones regulares, que se convirtió en el primer E-bite sobre un tema de programación. Desde junio de 2022 ya no está disponible para su compra desde el sitio web de SAP PRESS.
Ese E-bite incluía un capítulo que describía los siguientes cuatro probadores de expresiones regulares:
Regex Toy se incluye con un sistema NetWeaver y, que yo sepa, es el único comprobador de expresiones regulares basado en ABAP. Su pantalla de presentación en ese momento se veía así:
Como señalé en el E-bite sobre Regex Toy:
… una sección de Entrada superior proporciona un campo Regex que acepta un patrón RegEx, y una sección de Texto inferior acepta el texto que se someterá al patrón RegEx. Los resultados coincidentes se muestran en la sección Coincidencias que sigue a la sección Entrada, pero requiere que el usuario seleccione un botón de opción correspondiente a uno de los comandos en la sección Opciones o que presione la tecla Intro mientras el cursor está posicionado en los campos Regex o Reemplazo que precede a la sección Opciones. El área de resultados coincidentes tiene un fondo blanco; las cadenas que coinciden con el patrón RegEx se muestran con una fuente de texto en primer plano en negrita roja, mientras que el texto que no coincide se muestra con una fuente de texto en primer plano negra sin negrita.
Esta es una herramienta magnífica mediante la cual se pueden probar los matices del comportamiento de RegEx en ABAP antes de aplicar un patrón al código productivo en desarrollo. … esta utilidad no solo indica si una cadena de texto tiene coincidencias con el patrón RegEx especificado, sino que también muestra en contexto dónde ocurren estas coincidencias.
…
Un artículo publicado por el autor de Regex Toy incluye un descargo de responsabilidad de que no es tanto una herramienta sino simplemente un juguete. Sin embargo, después de probarlo, puede estar de acuerdo en que el autor está siendo demasiado modesto con respecto a su utilidad y aplicabilidad como ayuda para el desarrollo.
Los otros tres probadores de expresiones regulares mencionados anteriormente están disponibles a través de Internet, y encontré que Regex Storm es el más útil de ellos. Durante el tiempo que pasé componiendo el contenido del E-bite, decidí experimentar con una copia de Regex Toy, cambiando su código fuente para determinar si podía hacer que se comportara más como Regex Storm. Una vez que estuve satisfecho con el resultado, decidí incluir el conjunto necesario de parches Regex Toy en su propio capítulo en el E-bite para que los lectores pudieran aplicarlos en su sitio para hacer que su Regex Toy también se comporte como Regex Storm.
Avance rápido hasta febrero de 2023 y me encontré en un sitio donde una vez más quería aplicar a una copia de Regex Toy los parches que había descrito en el E-bite. Para mi horror, descubrí que algunos de esos parches ya no funcionaban o describían la ubicación de un parche en el código que ya no se veía como cuando estaba escribiendo el E-Bite.
En 2015, cuando ideé por primera vez los parches que se aplicarían a Regex Toy, tenía disponible un sistema NetWeaver 7.4, pero ahora en 2023 tengo disponible un sistema 7.5. Una mirada rápida a los atributos del código fuente de Regex Toy indicó que el programa, lanzado por primera vez en 2006, ahora tenía una fecha de cambio de junio de 2015, dos meses antes de que E-bite estuviera disponible. En un sistema 7.5, su pantalla de presentación se ha cambiado para que se vea así:
Observe que el bloque Opciones ahora contiene una nueva casilla de verificación titulada EN LA TABLA. Además, los títulos de los botones de radio en el bloque Opciones se convirtieron a mayúsculas, con la opción anterior llamada Coincidencia ahora llamada FIND ^…$, como se muestra en la comparación a continuación:
Bloque de opciones con la versión 7.4:
Bloque de opciones con la versión 7.5:
Un error que cometí al describir estos parches de Regex Toy en el E-bite fue no proporcionar ninguna indicación sobre la versión del código a la que se aplicaban. En consecuencia, los parches descritos en esta serie de blogs se aplican al objeto de repositorio ABAP DEMO_REGEX_TOY que tiene una fecha de última modificación del 01/06/2015.
Inicie Regex Storm usando su navegador web favorito, luego copie y pegue el siguiente trabalenguas en el bloque de entrada:
Una mofeta se sentó en un tocón. El zorrillo thunk el muñón apestaba y el zorrillo thunk el zorrillo apestaba.
Asegúrese de copiarlo exactamente como se muestra, con mayúsculas al comienzo de cada primera palabra de una oración, puntos al final de las dos oraciones y dos espacios que separan el final de la primera oración del comienzo de la segunda.
Luego, en el bloque Patrón, especifique el valor «k», es decir, la letra minúscula «k» seguida de un solo espacio. Debería mostrar lo siguiente:
Como puede ver en la captura de pantalla anterior, utiliza colores de fondo verdes y azules alternos para resaltar cada ocurrencia en el trabalenguas donde la letra minúscula «k» es seguida inmediatamente por un espacio. Elimine el espacio final y se resaltarán todas las letras «k».
Ahora enciende Regex Toy, luego:
Es importante que su cursor permanezca en el bloque Regex después del espacio que escribió en la posición del segundo carácter:
Como se muestra en la captura de pantalla anterior, debería encontrar que no observa el espacio final en la ranura Regex porque todas las letras minúsculas «k» están resaltadas, incluso aquellas que no van seguidas de un espacio.
Usando su editor ABAP favorito, haga una copia del objeto de repositorio ABAP DEMO_REGEX_TOY, seleccionando copiar todos sus componentes asociados cuando se le solicite, luego coloque la serie de líneas que se muestra a continuación en el método principal delante de la línea que borra sub1 a sub6 (primera y última línea , que se muestra antes y después de una línea de comentario de todos los guiones, ya existen en el código como líneas 79 y 80, respectivamente):
079 ENDIF.
" ------------------------------------
" DEMO_REGEX_TOY enhancement #1
" Enable explicit trailing spaces in pattern:
data : trailing_space type int4
, pattern_length type int4
.
if sy-curow eq 02.
trailing_space = sy-cucol - 16.
pattern_length = strlen( pattern ).
subtract pattern_length from trailing_space.
while trailing_space gt 00.
concatenate pattern
space
into pattern
respecting blanks.
subtract 01 from trailing_space.
endwhile.
endif.
" ------------------------------------
080 CLEAR: sub1, sub2, sub3, sub4, sub5, sub6.
Este es el mismo primer parche sin cambios del E-bite.
Ahora active el programa, ejecútelo y repita el proceso utilizado anteriormente:
Como se muestra en la captura de pantalla anterior, debería encontrar que ahora observa el espacio final en la ranura Regex porque solo se resaltan las letras minúsculas «k» seguidas de un espacio.
Mientras que el primer parche proporciona una mejora a Regex Toy al permitir que se observen los espacios finales como parte del patrón de coincidencia, todavía es menos que óptimo porque las coincidencias encontradas por Regex Toy se resaltan con una fuente de texto de primer plano en negrita roja, lo que significa que hay no se aplicó resaltado a los espacios encontrados que coincidían con el patrón. Este problema se aborda en el próximo blog de esta serie, Mejora de Regex Toy – Parte 2.
Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010
Paseo de la Reforma 26
Colonia Juárez, Cuauhtémoc
Ciudad de México 06600
Real Cariari
Autopista General Cañas,
San José, SJ 40104
Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073