AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

StringReplace-Funktion etwas aufbohren

Ein Thema von DieDolly · begonnen am 24. Jul 2022 · letzter Beitrag vom 25. Jul 2022
Antwort Antwort
Seite 3 von 3     123   
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#21

AW: StringReplace-Funktion etwas aufbohren

  Alt 25. Jul 2022, 11:22
Verschachtelte HTML-Tags kann ich nicht ausschließen.

Geändert von DieDolly (25. Jul 2022 um 11:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#22

AW: StringReplace-Funktion etwas aufbohren

  Alt 25. Jul 2022, 11:25
Ja, aber doch nicht innerhalb eines <img ....>

Problem bei RegEx ist, dass man z.B. zu einem <td> nicht das schließende </td> "sicher" finden kann, bei einer unbekanten Anzahl an weiteren Tags innerhalb.
Abgesehn davon, dass das Schließende sogar fehlen könnte.


Aber genau dafür gibt es für HTML passende Komponenten, genauso, wie man für XML auch eine XML-Komponente und kein StringReplace verwendet.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (25. Jul 2022 um 17:08 Uhr)
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#23

AW: StringReplace-Funktion etwas aufbohren

  Alt 25. Jul 2022, 11:27
Nein das nicht.
  Mit Zitat antworten Zitat
DBR

Registriert seit: 19. Jul 2005
38 Beiträge
 
#24

AW: StringReplace-Funktion etwas aufbohren

  Alt 25. Jul 2022, 14:53
Ich habe mir vor längerer Zeit mal einen Code gebastelt, der eingeklammerte Begriffe übergeht, und bei dem man zusätzlich bestimmen kann, wieviel Ersetzungen vorgenommen werden können. Nach längerem Suchen habe ich das Ding gefunden. Man braucht nur normale Klammern gegen spitze austauschen! Vielleicht hilft es. Wenn nicht, dann eben nicht.
Gruß DBR

function XReplace(const s, OldPattern, NewPattern: string; Number: integer;
IgnoreCase: Boolean; Auf: String = '('; Zu: String = ')'): string;
var
pc, ps, ph, x, z, lga, lgn, lgs: integer;
c, v: string;
begin
lga := length(OldPattern);
if (lga > 0) then
begin
lgn := length(NewPattern);
z := 0;
v := lowercase(OldPattern);
lgs := length(s);
try
x := 1;
while x <= lgs do
begin
c := copy(s, x, lga);
pc := pos(Auf, c);
ps := pos(Zu, copy(s, x + pc, maxint));
if (ps > 0) and (pc > 0) then
begin
ph := pos(Auf, copy(s, x + pc, maxint));
if (ph = 0) or (ph > ps) then
begin
Result := Result + copy(c, 1, pc);
inc(x, pc);
c := copy(s, x, ps);
Result := Result + c;
inc(x, ps);
continue;
end;
end;
if (c = OldPattern) or (IgnoreCase and (lowercase(c) = v)) then
begin
if lgn > 0 then
begin
Result := Result + NewPattern;
end;
inc(z);
inc(x, lga);
if z = Number then
break;
end
else
begin
Result := Result + copy(c, 1, 1);
inc(x);
end;
end;
Result := Result + copy(s, x, lgs - pred(x));
except
Result := 'FEHLER';
end;
end
else
Result := s;
end;

// Beispiel 1: ergibt 'Versuch1<Versuch2< Test3 >Versuch4<Test5> Versuch'
// da Test3 und Test 5 ordnungsgemäß in spitzen Klammern stehen
procedure TForm1.Button1Click(Sender: TObject);
var
Wieoft: integer;
Ignorcase: Boolean;
begin
Wieoft := -1; // Alle Vorkommen
Ignorcase := True; // bei False würde nichts ersetzt
ListBox1.items.add(XReplace('Test1<Test2< Test3 >Test4<Test5> Test', 'test',
'Versuch', Wieoft, Ignorcase, '<', '>'));
end;

// Beispiel 2: ergibt 'Versuch1<Versuch2< Test3 >Versuch4<Test5> Test'
// da das letzte "Test" bereits der vierte zu ändernde Begriff wäre
procedure TForm1.Button2Click(Sender: TObject);
var
Wieoft: integer;
Ignorcase: Boolean;
begin
Wieoft := 3; // nur die ersten drei, die nicht in spitzen Klammern stehen
Ignorcase := True;
ListBox1.items.add(XReplace('Test1<Test2< Test3 >Test4<Test5> Test', 'test',
'Versuch', Wieoft, Ignorcase, '<', '>'));
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 23:19 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