Este es el cuarto 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.
El blog anterior en esta serie describió cómo parchear una copia de Regex Toy para permitirle identificar coincidencias incluso cuando el texto coincidente se extiende a ambos lados de los saltos de línea implícitos, pero terminó con una descripción de un problema por el cual Regex Toy formatea el texto en el bloque de coincidencias de modo que se ejecuta más allá el área visible de la ventana y está acompañado por una barra de desplazamiento horizontal. Para ilustrar este problema nuevamente, ejecute Regex Toy mejorado y siga estos pasos:
Una mofeta se sentó en un tocón. El zorrillo thunk el muñón apestaba y el zorrillo thunk el zorrillo apestaba.
la mofeta
Como se muestra en la captura de pantalla anterior, el texto se desplaza hacia la derecha del área visible de la ventana de coincidencias, lo que requiere el uso de la barra de desplazamiento horizontal para verlo.
Ahora haga lo mismo con Regex Storm, seleccionando la casilla de verificación Ignorar caso:
Como se muestra en la captura de pantalla anterior, con Regex Storm el texto no se desplaza hacia la derecha del área visible del bloque de entrada.
Usando su editor ABAP favorito, edite la copia del objeto de repositorio ABAP DEMO_REGEX_TOY que contiene los parches anteriores y aplique el siguiente cambio de 2 pasos en la visualización del método:
1. Antes de la instrucción CONCATENATE LINES OF, inserte el siguiente conjunto de líneas (la primera y la última línea, que se muestran antes y después de una línea de comentario de todos los guiones, ya existen en el código como líneas 216 y 217, respectivamente):
216 APPEND '<html><body><font face="Arial monospaced for ...
" -----------------------------------
" DEMO_REGEX_TOY enhancement #4
" Format result text using approximate window width
" specified by line_len:
constants : html_space type string value ' '
, html_special_character_start
type string value '&'
, html_special_character_end
type string value ';'
, html_format_start
type string value '<'
, html_format_end
type string value '>'
.
data : visible_text_length
type int4
, html_last_space_length
type int4
, cause_line_break
type flag
, html_string type string
, html_excess type string
, html_stack type standard table
of string
.
loop at result_it
into result_wa.
clear: html_string, visible_text_length.
while strlen( result_wa ) gt 00.
case result_wa+00(01).
when html_format_start.
while result_wa+00(01) ne html_format_end.
concatenate html_string
result_wa+00(01)
into html_string.
shift result_wa left by 01 places.
endwhile.
when html_special_character_start.
if strlen( result_wa ) ge 06.
if result_wa+00(06) eq html_space.
if visible_text_length gt line_len.
cause_line_break = abap_true.
endif.
endif.
endif.
while result_wa+00(01) ne
html_special_character_end.
concatenate html_string
result_wa+00(01)
into html_string.
shift result_wa left by 01 places.
endwhile.
add 01 to visible_text_length.
if cause_line_break eq abap_false.
html_last_space_length
= strlen( html_string ) + 01.
endif.
when others.
add 01 to visible_text_length.
endcase.
concatenate html_string
result_wa+00(01)
into html_string.
shift result_wa left by 01 places.
if cause_line_break eq abap_true.
clear html_excess.
if html_last_space_length gt 00.
html_excess =
substring( val = html_string
off = html_last_space_length ).
html_string =
substring( val = html_string
len = html_last_space_length ).
endif.
append html_string
to html_stack.
clear: html_string, html_last_space_length.
visible_text_length = strlen( html_string ).
cause_line_break = abap_false.
if strlen( html_excess ) gt 00.
concatenate html_excess
result_wa
into result_wa.
endif.
endif.
endwhile.
append html_string
to html_stack.
endloop.
" -----------------------------------
217 CONCATENATE LINES OF result_it INTO result_wa ...
2. Luego cambie la instrucción CONCATENATE LINES OF de
CONCATENATE LINES OF result_it INTO result_wa …
a
CONCATENATE LINES OF html_stack INTO result_wa …
Este es el mismo cuarto parche sin cambios desde el E-bite.
Ahora activa el programa y ejecútalo usando el mismo proceso descrito anteriormente:
Una mofeta se sentó en un tocón. El zorrillo thunk el muñón apestaba y el zorrillo thunk el zorrillo apestaba.
la mofeta
Como se muestra en la captura de pantalla anterior, debería encontrar que ahora se encuentran las mismas dos coincidencias, pero el texto en el bloque Coincidencias ya no se desplaza hacia la derecha de su área visible.
Ahora intente la siguiente prueba de expresión regular:
A
zorrillo
se sentó
en
a
tocón.
de modo que cada palabra vaya seguida de un salto de línea explícito que la coloque en su propia línea, como se muestra arriba.
Como se muestra en la captura de pantalla anterior, debería encontrar que ahora cada carácter del Texto coincide con el patrón de expresión regular, como debería ser.
Nota: El carácter de punto es el carácter comodín aplicable a los patrones de expresiones regulares, lo que indica que se debe hacer coincidir cualquier carácter en esa posición en el texto, proporcionando la misma funcionalidad a las expresiones regulares que el carácter comodín ‘+’ proporciona con patrones especificados para rangos y declaraciones de opciones de selección. en SAP.
Sin embargo, observe que el texto ya no está formateado en la ventana Coincidencias con los saltos de línea explícitos proporcionados con el contenido de la ventana Texto.
A continuación, intente lo mismo con Regex Storm:
Como se muestra en la captura de pantalla anterior, Regex Storm observa y retiene saltos de línea explícitos.
Mientras que el cuarto parche proporciona una mejora a Regex Toy al permitirle mantener el texto de las coincidencias dentro de los límites de su ventana, ya no observa saltos de línea explícitos. Este problema se aborda en el próximo blog de esta serie, Mejora de Regex Toy – Parte 5.
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