Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Replace in einem HTML-Text mittels TRegExpr (https://www.delphipraxis.net/51196-replace-einem-html-text-mittels-tregexpr.html)

Garby 8. Aug 2005 08:33


Replace in einem HTML-Text mittels TRegExpr
 
Hallo allerseits.

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

Khabarakh 8. Aug 2005 10:17

Re: Replace in einem HTML-Text mittels TRegExpr
 
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;

Grendel 8. Aug 2005 11:14

Re: Replace in einem HTML-Text mittels TRegExpr
 
Selam!
Das hier:
Code:
[^<|/](b)[^>]
sollte das gesuchte "b" matchen.

Bis neulich ...

Garby 8. Aug 2005 11:55

Re: Replace in einem HTML-Text mittels TRegExpr
 
@Khabarakh: Danke

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

z.B. bei
Delphi-Quellcode:
abc<abc>
wird das erste b nicht gefunden.

Gibts vielleicht andere Vorschläge?

Grendel 8. Aug 2005 12:04

Re: Replace in einem HTML-Text mittels TRegExpr
 
Zitat:

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:

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 ...

Garby 8. Aug 2005 12:10

Re: Replace in einem HTML-Text mittels TRegExpr
 
Hi,

vielleicht habe ich es nicht richtig ausgedrückt ;)

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

Danke

Grendel 8. Aug 2005 13:41

Re: Replace in einem HTML-Text mittels TRegExpr
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:56 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