Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo Hace 1 Semana
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: Feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.083
Poder: 13
movorack 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: Hace 1 Semana a las 23:29:05.
Responder Con Cita
  #2  
Antiguo Hace 1 Semana
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: Feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.083
Poder: 13
movorack Va camino a la fama
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é.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Expresion regular JuanOrtega Varios 19 14-11-2012 03:11:15
Expresión regular Access? nena_yei SQL 4 02-03-2010 12:50:36
Expresion regular Ivan_25 .NET 2 13-04-2009 09:58:47
Expresión regular para validar dirección IP noob Varios 1 15-02-2009 16:54:54
Expresion Regular D-MO Varios 3 30-06-2007 18:51:59


La franja horaria es GMT +2. Ahora son las 23:46:29.


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