Thema: Delphi Regex geht nicht mehr?

Einzelnen Beitrag anzeigen

Chefx

Registriert seit: 13. Jun 2009
Ort: Radebeul
241 Beiträge
 
Turbo Delphi für Win32
 
#37

Re: Regex geht nicht mehr?

  Alt 31. Jul 2009, 20:15
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;
ein Sprichwort für Programmierer:
"Viele wege fürn zur EXE, aber ob sie funktioniert ist die andere Frage."
schau mal bei www.xlite.de.tc vorbei
  Mit Zitat antworten Zitat