Start 與 Stop 屬性可限定正則表達式在字串的特定區間內搜尋/替換,實現區域性處理。
var
reg: TPerlRegEx;
begin
reg := TPerlRegEx.Create(nil);
reg.RegEx := 'ab';
reg.Replacement := '◆';
{ 1. 僅替換第 1-2 字元區間 }
reg.Subject := 'ababab';
reg.Start := 1;
reg.Stop := 2;
while reg.MatchAgain do reg.Replace;
ShowMessage(reg.Subject); { 輸出: ◆abab }
{ 2. 僅替換第 3-4 字元區間 }
reg.Subject := 'ababab';
reg.Start := 3;
reg.Stop := 4;
while reg.MatchAgain do reg.Replace;
ShowMessage(reg.Subject); { 輸出: ab◆ab }
{ 3. 僅替換第 5-6 字元區間 }
reg.Subject := 'ababab';
reg.Start := 5;
reg.Stop := 6;
while reg.MatchAgain do reg.Replace;
ShowMessage(reg.Subject); { 輸出: abab◆ }
FreeAndNil(reg);
end;
| 屬性 | 型別 | 索引基底 | 說明 |
|---|---|---|---|
Start | Integer | 1-based | 搜尋起始位置 (含) |
Stop | Integer | 1-based | 搜尋結束位置 (含) |
Start := 1 代表從第一字元開始Start := 1, Stop := 2 覆蓋第 1、2 兩個字元Subject 內容,僅限制 Match/MatchAgain 掃描範圍function ReplaceNth(const Subject, Pattern, Replacement: string; N: Integer): string;
var reg: TPerlRegEx; count: Integer;
begin
reg := TPerlRegEx.Create(nil);
try
reg.RegEx := Pattern;
reg.Replacement := Replacement;
reg.Subject := Subject;
count := 0;
while reg.MatchAgain do
begin
Inc(count);
if count = N then
begin
reg.Replace;
Break;
end;
end;
Result := reg.Subject;
finally
reg.Free;
end;
end;
Start/Stop 為區域性文字處理提供了底層支援,配合迴圈可實現各種精確控制需求。