Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-07-2016
ellucho ellucho is offline
Registrado
NULL
 
Registrado: may 2015
Posts: 1
Poder: 0
ellucho Va por buen camino
Encontrar ocurrencias entre dos strings

Hola, estoy tratando de encontrar todas las ocurrencias entre dos strings en un codigo html por ejemplo de este codigo:
Código:
<div class="row">
   <div class="col">
     <div class="well">
       <a>Google</a>
     </div>
   </div>
 </div>
<div class="row">
  <div class="col">
    <div class="well">
       <a>Yahoo</a>
    </div>
  </div>
</div>
Me tendia que devolver:
Código:
<a>Google</a>
<a>Yahoo</a>
osea, todo lo que esta entre:
Código:
<div class="well">
y
Código:
</div>
Probe asi pero no hay caso:

Código:
regexpr := TRegEx.Create('<div class="well">(.*)</div>',[roIgnoreCase,roMultiline]);
Le erre con el titulo, deberia decir regexp

Última edición por ellucho fecha: 15-07-2016 a las 22:26:45. Razón: Error en titulo
Responder Con Cita
  #2  
Antiguo 16-07-2016
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Html se debe procesar con un PARSER de html. Las expresiones regulares son insuficientes en este caso.

Ahora bien si la estructura es fija, el problema es que (.*) quiere decir " Captura todo lo que viene a continuacion" y eso significa TODO, y ademas es "greddy" osea, tiene precedencia sobre lo que sigue.

Te recomiendo este sitio que explica todo esto muy bien y completo:

http://www.regexbuddy.com/index.html

Y que sues alguna herramienta para testear regex de forma visual (ese sitio vende una, pero los recursos y tutoriales son genericos).

Para eso especificamente, esta cadena funciona:


Código PHP:
<a>(\w+)</a
Mira que solo captura letras y eso es todo.
__________________
El malabarista.
Responder Con Cita
  #3  
Antiguo 17-07-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola ellucho, bienvenido a los foros de Club Delphi y como se acostumbra con los iniciados te invitamos a leer nuestra guía de estilo.


Si solamente buscas las ocurrencias entre dos cadenas exactas, sin pretender la flexibilidad que te ofrece un parser, desde Delphi podes hacer:

Código Delphi [-]
uses StrUtils;

procedure FindBetween(htmlText: string; const Since, Unto: string; Result: TStrings);
var
  p1, p2: Integer;
begin
  if (Since = '') or (Unto = '') then Exit;
  repeat
    p1 := Pos(Since, htmlText);
    p2 := PosEx(Unto, htmlText, p1);
    if (p1 <> 0) and (p2 <> 0) then
    begin
      Result.Add(Trim(Copy(htmlText, p1 + Length(since), (p2 - p1) - Length(since))));
      Delete(htmlText, 1, p2 + Length(Unto));
    end;
  until (p1=0) or (p2 = 0);
end;

Ej. de la prueba:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo2.Lines.Clear;
  FindBetween(Memo1.Text, Edit1.Text, Edit2.Text, Memo2.Lines);
end;

Salida:


Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 17-07-2016 a las 23:42:19.
Responder Con Cita
  #4  
Antiguo 24-07-2016
Delphifandev Delphifandev is offline
Miembro
NULL
 
Registrado: jul 2016
Posts: 11
Poder: 0
Delphifandev Va por buen camino
Para mí el parser de html es la mejor opción porque el html cambia muchísimo de página a página. Las veces que intenté hacer cosas simples (manipulando cadenas) en html y delphi el resultado fue que funcionaba en algunas páginas y en otras no.
Responder Con Cita
Respuesta



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
Encontrar diferencias entre versiones de un rtf santiago14 Varios 2 11-01-2016 02:08:06
Encontrar objeto por su nombre, encontrar metodo, ejecutar metodo coso Trucos 7 02-09-2011 00:23:13
ocurrencias de Jaimito.... Alfredo Humor 0 22-12-2004 14:36:42
consulta entre dos strings weke SQL 4 06-10-2004 10:43:01
Copiar Strings mauro Varios 3 04-12-2003 21:22:48


La franja horaria es GMT +2. Ahora son las 21:55:58.


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
Copyright 1996-2007 Club Delphi