您可以使用PosOffset
函数的参数以避免从头开始搜索并跳过第一次出现。
定位给定字符串中的子字符串。
Pos 方法返回 Substr 在 Str 中第一次出现的索引,从 Offset 开始搜索。
如果未找到 Substr 或 Offset 无效(例如,如果 Offset 超过字符串长度或小于 1),则此方法返回零。
Offset 参数是可选的。默认情况下,偏移量设置为 1,如果未指定偏移量值,则使用默认值从头开始搜索。
笔记:
Pos 即使在字符串从零开始的平台中也使用从一开始的数组索引。
Pos 方法等价于 System.StrUtils.PosEx。
例如:
procedure SearchNext(AMemo : TMemo; const ATextToSearch : string; ACycle : Boolean = True);
var
Offset : Integer;
begin
//adjusting offset
Offset := AMemo.SelStart + AMemo.SelLength + 1;
if(Offset >= Length(AMemo.Text)) then
Offset := 1;
//searching
Offset := Pos(AnsiLowerCase(ATextToSearch), AnsiLowerCase(AMemo.Text), Offset);
if(Offset > 0) then
begin
//selecting found text
AMemo.SelStart := Offset - 1;
AMemo.SelLength := Length(ATextToSearch);
AMemo.SetFocus;
end else
begin
//recursion from the beginning
if(ACycle and (AMemo.SelStart + AMemo.SelLength <> 0)) then
begin
AMemo.SelStart := 0;
SearchNext(AMemo, ATextToSearch, True);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
SearchNext(Memo1, Edit1.Text);
end;