Thema: Delphi Regex geht nicht mehr?

Einzelnen Beitrag anzeigen

Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
427 Beiträge
 
Delphi 11 Alexandria
 
#31

Re: Regex geht nicht mehr?

  Alt 31. Jul 2009, 17:13
Also:

1) Deine eingestellte RegEx findet nur Texte der Bauart: ein '<', gefolgt von einem beliebigen Zeichen, gefolgt von '>', also so was wie <t> aber nicht <tt>!
2) SubexpressionCount bezieht sich auf die Anzahl der Gruppierungsklammern des regulären Ausdrucks: bei '<.>' gibt es keine, also 0. Bei '<(.+)>' ist der Count = 1!
3) Was Du suchst ist MatchedExpression und zwar zusammen mit der Option UnGreedy (behaute ich einfach mal )

Schau Dir mal den Code an, der läuft bei mir fein:
Delphi-Quellcode:
function regl(subj, expr: string): string;
var
  code: array of string;
  pos: array of integer;
  regexMachine: TPerlRegEx;
begin
  SetLength(code, 0); //Array initialisieren
  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
        code[Length(code) - 1] := regexMachine.MatchedExpression; // Neue Treffer in das code Array eintragen
      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;
und zwar zusammen mit der RegEx '<.+>':
Delphi-Quellcode:
procedure TForm3.Button1Click(Sender: TObject);
begin
  edit1.Text := regl(edit2.Text, '<.+>'); // finde '<' gefolgt von einem oder mehreren beliebigen Zeichen gefolgt von '>'
end;
das liefert dann für den Text '<Test>er and <Test>s and <Sheep>++':

<Test>|,<Test>|,<Sheep>|,



Grüße,
Uli
  Mit Zitat antworten Zitat