Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Error al remplazar con expresión regular (https://www.clubdelphi.com/foros/showthread.php?t=93405)

movorack 13-09-2018 23:11:54

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?

movorack 13-09-2018 23:58:48

Al parecer es un error en mi proyecto. No he podido identificarlo pero un compañero hizo un proyecto de ejemplo y funciona correctamente con el mismo código que publiqué.


La franja horaria es GMT +2. Ahora son las 14:25:42.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi