// MatchedExpression 與 SubExpressions[0]
var
reg: TPerlRegEx;
begin
reg := TPerlRegEx.Create(nil);
reg.Subject := 'CodeGear Delphi 2007';
reg.RegEx := 'Delphi';
while reg.MatchAgain do
begin
ShowMessage(reg.MatchedExpression); //Delphi; 這是匹配到的內容
ShowMessage(reg.SubExpressions[0]); //Delphi; 也可以這樣顯示匹配到的內容
end;
{
SubExpressions 是一個數組:
SubExpressions[1] 儲存第 1 個表達式匹配的內容;
SubExpressions[2] 儲存第 2 個表達式匹配的內容;
SubExpressions[n] 儲存第 n 個表達式匹配的內容;
SubExpressions[0] 儲存整個表達式匹配的內容;
MatchedExpression 表示的不過是 SubExpressions[0].
}
FreeAndNil(reg);
end;
//提取子表達式匹配到的內容
var
reg: TPerlRegEx;
begin
reg := TPerlRegEx.Create(nil);
reg.Subject := 'abc A1111 BB222 CCC33 DDDD4';
reg.RegEx := '\b([A-D]+)([1-4]+)\b'; //這個表達式有兩個子表達式構成
while reg.MatchAgain do
begin
ShowMessage(reg.SubExpressions[0]); //將分別顯示: A1111 BB222 CCC33 DDDD4
ShowMessage(reg.SubExpressions[1]); //將分別顯示: A BB CCC DDDD
ShowMessage(reg.SubExpressions[2]); //將分別顯示: 1111 222 33 4
{另外:
reg.SubExpressionCount 是子表達式的個數;
reg.SubExpressionLengths[n] 是第 n 個表達式返回的字符串的長度;
reg.SubExpressionOffsets[n] 是第 n 個表達式返回的字符串在源字符串中的位置
}
end;
FreeAndNil(reg);
end;
//子表達式不能超過 MAX_SUBEXPRESSIONS = 99 個, MAX_SUBEXPRESSIONS 是 TPerlRegEx 的內置常數.