
Este es el tercero 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 espacios que coincidan con el patrón de expresión regular, pero terminó con una descripción de un problema en el que Regex Toy no encuentra coincidencias de patrón donde el texto proporcionado en el bloque de texto se extiende implícitamente a ambos lados saltos de línea. 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, encuentra solo una de las dos ocurrencias del patrón de expresión regular. La segunda aparición comienza al final de la primera línea y continúa en la línea siguiente.
Ahora haga lo mismo con Regex Storm, seleccionando la casilla de verificación Ignorar caso:
Tal vez esa no sea una comparación justa porque la cadena «la mofeta» en el trabalenguas no se extiende implícitamente a ambos lados de las líneas en el ejemplo Regex Storm anterior. Esto se soluciona fácilmente colocando tantos espacios después de la palabra final «thunk» como para que la cadena final «the skunk» se extienda entre dos líneas en Regex Storm:
Como se muestra en la captura de pantalla anterior, ahora la segunda aparición de «la mofeta» se extiende a lo largo de dos líneas, y Regex Storm la encuentra y la resalta en consecuencia.
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 4 pasos:
El primer cambio se aplicará en el método init:
1. Cambiar línea
wordwrap_to_linebreak_mode = cl_gui_textedit=>true.
a
wordwrap_to_linebreak_mode = cl_gui_textedit=>false.
Los cambios restantes se aplicarán en el método principal:
2. Comente la declaración SPLIT que sigue a la declaración
cl_gui_cfw=>flush( ).
3. Cambie las cláusulas IN TABLE de todas las sentencias FIND y REPLACE… IN TABLE… (seis en total) en el bloque TRY-ENDTRY de
... IN TABLE result_it ...
a
... IN text_wa ...
4. Copie la sentencia SPLIT comentada (comentada en el paso 2 anterior) y colóquela delante de la sentencia display() como una línea activa.
Este es el mismo tercer parche sin cambios desde el E-bite. Sin embargo, si su sistema es NetWeaver 7.5, ese no es el final de los cambios necesarios. La declaración TRY del bloque TRY-ENDTRY al que se hace referencia en el paso 3 anterior ahora aparece en la versión parcheada de este programa en la línea 101 y le sigue una declaración IF en la línea 102:
101 TRY.
102 IF in_table = ‘X’.
Esta instrucción IF no existía en la versión NetWeaver 7.4. La variable es nueva en la definición de pantalla de selección Regex Toy y se correlaciona con la nueva casilla de verificación IN TABLE que aparece en el bloque Opciones:
Después de aplicar todos los cambios indicados anteriormente en los pasos 1 a 4, ahora debería ver una declaración ELSE en la línea 124 y su ENDIF en la línea 149. Gran parte de este código es una copia de las mismas seis declaraciones FIND y REPLACE que acaba de cambiar de acuerdo con paso 3 anterior, pero en estos casos las declaraciones no incluyen la palabra TABLE después de sus cláusulas IN. Todas estas declaraciones también requerirán el mismo cambio relativo, esta vez reemplazando el operando result_string con text_wa.
Aparte: En el E-bite, mencioné esto sobre Regex Toy…
Si hace clic en el botón Documentación sobre expresiones regulares en la parte superior de la pantalla, accederá a la documentación estándar en línea de SAP sobre RegExes.
En ese momento, antes de la introducción de la casilla de verificación IN TABLE, todas las capacidades ofrecidas por Regex Toy parecían ser intuitivas, por lo que no me preocupaba la falta de documentación que describiera la utilidad en sí. Pero ahora, con la introducción de la casilla de verificación IN TABLE, ya no es tan intuitivo; un usuario no tendría ninguna razón para entender qué capacidad de expresiones regulares controla esta casilla de verificación. La nueva declaración IF mencionada anteriormente es uno de los dos lugares donde la variable in_table correspondiente controla el procesamiento:
Tendré más que decir sobre esta casilla de verificación al final de este blog.
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 encuentra ambas apariciones de la cadena «la mofeta» y las resalta en consecuencia.
Mientras que el tercer parche proporciona una mejora a Regex Toy al permitirle observar coincidencias en el texto que se extiende implícitamente a ambos lados de los saltos de línea, el bloque de coincidencias ahora está formateado de tal manera que el texto se extiende más allá de la parte visible de la pantalla y aparece una barra de desplazamiento horizontal debajo. .
De hecho, si eliminara la marca de verificación de la casilla de verificación EN LA TABLA, verá que el texto de Coincidencias no excede el ancho de la pantalla, lo que significa que su formato está controlado por si la casilla de verificación EN LA TABLA está marcada o no. Pero si observa detenidamente, el texto del bloque Coincidencias ya no contiene dos espacios consecutivos que separan las dos oraciones. Este comportamiento de formato de perder espacios consecutivos cuando la casilla de verificación IN TABLE permanece sin marcar también es evidente en el programa DEMO_REGEX_TOY copiado.
El problema del texto en el bloque de coincidencias que pierde espacios consecutivos del texto proporcionado en el bloque de texto cuando se marca IN TABLE no fue un problema cuando escribí el E-bite porque esta casilla de verificación no estaba disponible en la versión de Regex Toy que tenía en ese momento, pero tendré más que decir al respecto en el blog final de esta serie.
Mientras tanto, el problema del texto en el bloque de coincidencias que excede la parte visible de la ventana de coincidencias, que ahora está acompañada por una barra de desplazamiento horizontal, se aborda en el próximo blog de esta serie, Mejorar el juguete Regex – Parte 4.
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