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.