TFbmRegExpr.MatchCount
Diese Variable ist vom Typ Integer und eine Eigenschaft der Klasse TFbmRegExpr, welche in der Unit RegExpr definiert wurde. Diese Variable bietet nur lesenden Zugriff.
Liefert die Anzahl der Treffer dieses Aufrufs von TFbmRegExpr.Exec bzw. TFbmRegExpr.ExecNext zurück.
Dies ist nicht die Anzahl der Vorkommen für die Ausführung des regulären Ausdrucks, sondern die Anzahl der Referenzen des einzelnen Treffers. Die verwendete Klasse kann vorab nicht ermitteln, wie oft ein Ausdruck in einem Text gefunden werden kann.
Ein Beispiel:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var
RegExpr: TFbmRegExpr;
begin
RegExpr := TFbmRegExpr.Create;
try
RegExpr.Expression := '([0-9]+)';
if RegExpr.Exec('123 blah 456 testen 789') then
repeat
Item.AddToProtocol(IntToStr(RegExpr.MatchCount));
until not RegExpr.ExecNext;
finally
RegExpr.Free;
end;
end.
RegExpr: TFbmRegExpr;
begin
RegExpr := TFbmRegExpr.Create;
try
RegExpr.Expression := '([0-9]+)';
if RegExpr.Exec('123 blah 456 testen 789') then
repeat
Item.AddToProtocol(IntToStr(RegExpr.MatchCount));
until not RegExpr.ExecNext;
finally
RegExpr.Free;
end;
end.
Der obige Code fügt immer 2 in das Systemprotokoll ein, weil $0 und $1 verfügbar sind. Insgesamt kann der reguläre Ausdruck aber 3 mal angewendet werden. Einmal mit Exec und zweimal mit ExecNext. Wenn man die Gesamtzahl der Treffer ermitteln möchte, muss man also einen Zähler einbauen.
MatchCount ist sinnvoll für reguläre Ausdrücke mit ODER-Operator. Je nach Abzweigung kann es vorkommen, dass es mal mehr und mal weniger Matches gibt. Auch bei der Verwendung einer dynamischen Expression kann dies sinnvoll sein (z.B. in Kombination mit TFbmRegExpr.EscapeRegExChars)