ich hab mal ein bissel probiert.
Hab das jetzt gefunden!
Die funktion für die Länge ist in Tperlregex:
regexMachine.MatchedExpressionLength;
Und die Positionbestimmen:
regexMachine.MatchedExpressionOffset;
Hier noch mal der gesamte Quelltext
(fehlerfrei!):
Delphi-Quellcode:
function verarbeitung(code:array of string;pos:array of integer):string;
var
i:integer;
begin
result:='';
for i := low(code) to high(code) do
result := result + code[i] + '|' + inttostr(pos[i]) + ',';
end;
function regl(subj, expr: string): string;
var
code: array of string;
pos: array of integer;
regexMachine: TPerlRegEx;
begin
SetLength(code, 0); //Array initialisieren
SetLength(pos, 0); //
regexMachine := TPerlRegEx.Create(nil);
try
regexMachine.RegEx := expr;
regexMachine.Subject := subj;
regexMachine.Options := regexMachine.Options + [preUnGreedy];
if regexMachine.Match then
begin
repeat
setlength(code, Length(code) + 1);// Treffer um neu gefundenen erweitern
setlength(pos, Length(pos) + 1); //
code[Length(code) - 1] := regexMachine.MatchedExpression;// Neue Treffer in das code Array eintragen
pos[Length(code) - 1] := regexMachine.MatchedExpressionOffset - 1;//Position des Treffers
until not regexMachine.MatchAgain; // und weitersuchen. Abbruch, wenn kein Treffer mehr
result := verarbeitung(code,pos); // jetzt ALLE Treffer verarbeiten
end;
finally
regexMachine.free;
end;
end;
procedure TForm3.Button1Click(Sender: TObject);
begin
edit1.Text:=regl(edit2.Text,'<.+>');
end;