AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Replace in einem HTML-Text mittels TRegExpr
Thema durchsuchen
Ansicht
Themen-Optionen

Replace in einem HTML-Text mittels TRegExpr

Ein Thema von Garby · begonnen am 8. Aug 2005 · letzter Beitrag vom 8. Aug 2005
Antwort Antwort
Benutzerbild von Garby
Garby

Registriert seit: 17. Mär 2003
Ort: Tirol
199 Beiträge
 
Delphi 2005 Professional
 
#1

Replace in einem HTML-Text mittels TRegExpr

  Alt 8. Aug 2005, 09:33
Hallo allerseits.

In einem String, in dem HTML-Text enthalten ist, möchte ich Teilstrings ersetzen ohne dabei HTML Tags zu verändern.
Bsp:<HTML><a>Ich habe [b]fertig[/b].</a></HTML> soll zu<HTML><a>Ich ha[b]b[/b]e [b]fertig[/b].</a></HTML> und nicht zu<HTML><a>Ich ha[b]b[/b]e <[b]b[/b]>fertig</[b]b[/b]>.</a></HTML> werden.

Dazu würde ich die Replace Funktion von TRegExpr verwenden. Hat jemand eine Idee wie diese Expression ausschauen könnte?

Oder kennt jemand vielleicht eine andere (schnelle) Möglichkeit?

Danke
Walter
Wenn zwei dasselbe tun, ist es noch lange nicht dasselbe
(Adelphi)
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: Replace in einem HTML-Text mittels TRegExpr

  Alt 8. Aug 2005, 11:17
So sollte es auch ohne TRegExpr funktionieren:
Delphi-Quellcode:
procedure Foo(var s: String; const OldPattern, NewPattern: string);
var
  i: Integer;
  Tag: Boolean;
begin
  i := 1;
  while i - 1 <= Length(s) - Length(OldPattern) do
  begin
    case s[i] of
      '<': Tag := true;
      '>': Tag := false;
      else
        if not Tag and (Copy(s, i, Length(OldPattern)) = OldPattern) then
        begin
          Delete(s, i, Length(OldPattern));
          Insert(NewPattern, s, i);
        end;
    end;
    Inc(i);
  end;
end;
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Grendel
(Gast)

n/a Beiträge
 
#3

Re: Replace in einem HTML-Text mittels TRegExpr

  Alt 8. Aug 2005, 12:14
Selam!
Das hier:
Code:
[^<|/](b)[^>]
sollte das gesuchte "b" matchen.

Bis neulich ...
  Mit Zitat antworten Zitat
Benutzerbild von Garby
Garby

Registriert seit: 17. Mär 2003
Ort: Tirol
199 Beiträge
 
Delphi 2005 Professional
 
#4

Re: Replace in einem HTML-Text mittels TRegExpr

  Alt 8. Aug 2005, 12:55
@Khabarakh: Danke

@Grendel: Auch Danke, aber dieser Ausdruck funktioniert (mit der Funktion Replace) nicht.

z.B. beiabc<abc> wird das erste b nicht gefunden.

Gibts vielleicht andere Vorschläge?
Walter
Wenn zwei dasselbe tun, ist es noch lange nicht dasselbe
(Adelphi)
  Mit Zitat antworten Zitat
Grendel
(Gast)

n/a Beiträge
 
#5

Re: Replace in einem HTML-Text mittels TRegExpr

  Alt 8. Aug 2005, 13:04
Zitat von Garby:
@Grendel: Auch Danke, aber dieser Ausdruck funktioniert (mit der Funktion Replace) nicht.
Arrgghh... Ja is klar.
Das Problem ist, daß Replace den gesamten Match ersetzt. Die gesuchte Stelle steht aber in $1 und nicht in $0 (gesamter Match).
Keine Ahnung, ob man TRegExpr sagen kann, daß er bitte $1 statt $0 ersetzen soll?!

Zitat von Garby:
abc<abc>
Das kann auch nicht gehen, da o.g. RegEx nur "b"s matcht, denen kein < vorangestellt bzw. > angehangen ist.
Das es allgemeingültiger sein sollte ging aus deinem ersten Post nicht hervor.
Was genau soll das Ding denn können?

Bis neulich ...
  Mit Zitat antworten Zitat
Benutzerbild von Garby
Garby

Registriert seit: 17. Mär 2003
Ort: Tirol
199 Beiträge
 
Delphi 2005 Professional
 
#6

Re: Replace in einem HTML-Text mittels TRegExpr

  Alt 8. Aug 2005, 13:10
Hi,

vielleicht habe ich es nicht richtig ausgedrückt

Also wenn ich b mit X ersetzen möchte soll bei abc<abc>abc aXc<abc>aXc rauskommen.
Ich möchte also alle b ersetzen außer das b steht innerhalb eines Tags.

Danke
Walter
Wenn zwei dasselbe tun, ist es noch lange nicht dasselbe
(Adelphi)
  Mit Zitat antworten Zitat
Grendel
(Gast)

n/a Beiträge
 
#7

Re: Replace in einem HTML-Text mittels TRegExpr

  Alt 8. Aug 2005, 14:41
Alles klar! Das ist nicht ganz trivial.
Werd nachher zu Hause mal gucken; Hab mein RegEx Buch gerade nicht zur Hand.

Bis neulich ...

edit: Mit der TRegExpr wird das wohl nicht funktionieren, da diese kein "lokk ahead" und "look behind" unterstützt. Und ohne wüsste ich das Problem nicht zu lösen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz