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
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))
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?