Ver Mensaje Individual
  #1  
Antiguo 14-09-2018
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Reputación: 20
movorack Va camino a la famamovorack Va camino a la fama
Error al remplazar con expresión regular

Buenas tardes.

Al intentar reemplazar un texto usando las expresiones regulares de la VCL (TRegex) genera error de stack overflow y no me permite reemplazar.

Tengo la siguiente consulta SQL

Código SQL [-]
SELECT *
FROM TABLAA
/*ETIQUETA-JOIN-INIC*/
INNER JOIN TABLAB
  ON  TABLAA.CAMPO1 = TABLAB.CAMPO1
  AND TABLAA.CAMPO2 = TABLAB.CAMPO2
  AND TABLAA.CAMPO3 = TABLAB.CAMPO3
  AND ((TABLAB.CAMPO4 = 1 AND TABLAB.CAMPO5 = 'A')
       OR (TABLAB.CAMPO4 = 2 AND TABLAB.CAMPO5 = 'B')
       OR (TABLAB.CAMPO4 = 3))
/*ETIQUETA-JOIN-FINA*/
WHERE TABLAA.CAMPO6 = :CAMPO6
  AND TABLAA.CAMPO7 = :CAMPO7
  AND TABLAA.CAMPO8 <> :CAMPO8

De la cual quiero borrar lo contenido entre los comentarios /*ETIQUETA-*-INIC*/ y /*ETIQUETA-*-FINA*/ y para eso estoy usando la siguiente expresión:

\W*\/\*ETIQUETA-\S+-INIC\*\/(\w|\W){0,}\/\*ETIQUETA-\S+-FINA\*\/\W*

La cual funciona correctamente en el evaluador



Pero al intentar evaluarla con las expresiones regulares de la VCL genera error

Código Delphi [-]
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class $C00000FD with message 'stack overflow at 0x007e5c5d'.
---------------------------
Break   Continue   Help   
---------------------------

El código que uso es el siguiente:

Código Delphi [-]
    SQL.Text := TRegex.Replace(SQL.Text, '\W*\/\*ETIQUETA-\S+-INIC\*\/(\w|\W){0,}\/\*ETIQUETA-\S+-FINA\*\/\W*', #13#10, [roIgnoreCase, roMultiLine]);

Pienso que el error está en la expresión regular porque al colocar una expresión mas simple (Ej: \/\*ETIQUETA\S+\*\/) el código realiza el reemplazo correctamente.

¿Alguna idea de que falla tiene la expresión para que genere la excepción?
__________________
Buena caza y buen remar... http://mivaler.blogspot.com

Última edición por movorack fecha: 14-09-2018 a las 00:29:05.
Responder Con Cita