Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

TRegex und Capture Groups

  Alt 20. Jun 2014, 17:16
Eine dumme Frage. Ist das normal dass das Pattern an sich auch in der "Capture-Group" mit drinsteckt?

Folgendes Beispiel:
Delphi-Quellcode:
program Project4;

{$APPTYPE CONSOLE}

{$R *.res}

uses System.SysUtils, System.RegularExpressions;

procedure regexTest();
const
   pattern: String = '(?''name''Delphi|C\+\+)-*(?''ort''\w+)';
   subject: String = 'Ich gehe heute in die Delphi-Praxis. Danach auf den Delphischrottplatz. Und vielleicht in die C++-Bar.';
var
   regex: TRegex;
   match: TMatch;
   group: TGroup;
begin
   regex := TRegex.Create(pattern);

   for match in regex.Matches(subject) do begin
      WriteLn('Match: '+match.Value.QuotedString());
      for group in match.Groups do
         WriteLn(' '+group.Value.QuotedString());

      WriteLn('Der Name ist '+match.Groups['name'].Value.QuotedString() );
      WriteLn('Der Ort ist '+match.Groups['ort'].Value.QuotedString() );

      WriteLn(sLineBreak);

   end;

end;

begin
   regexTest();
   ReadLn;
end.
Ergibt:
Code:
Match: 'Delphi-Praxis'
   'Delphi-Praxis'
   'Delphi'
   'Praxis'
Der Name ist 'Delphi'
Der Ort ist 'Praxis'


Match: 'Delphischrottplatz'
   'Delphischrottplatz'
   'Delphi'
   'schrottplatz'
Der Name ist 'Delphi'
Der Ort ist 'schrottplatz'


Match: 'C++-Bar'
   'C++-Bar'
   'C++'
   'Bar'
Der Name ist 'C++'
Der Ort ist 'Bar'
Ich hätte den jeweils ersten Eintrag bei den Gruppen nicht erwartet.
  Mit Zitat antworten Zitat