Welcome

首页 / 软件开发 / Delphi / Delphi下的通配符查找函数

Delphi下的通配符查找函数2012-01-11 博客园 涂磊//Delphi 下的通配符查找函数

Function IsLike(ax, abc: String): Boolean; //ax是子串,abc是源串
Var
abcstart, axstart, abclength, axlength: Integer;
endpartabc, endpartax, subax: String;
temp, abcwww, axwww: Integer;
Begin //aaa
temp := 0;
abcstart := 1;
axstart := 1;
axwww := 1;
abcwww := 1;
ax:=LowerCase(ax);
abc:=LowerCase(abc);
abclength := Length(abc);
axlength := Length(ax);
result := True;
While axstart <= axlength Do Begin //bbb
If ax[axstart] = "?" Then Begin
inc(axstart);
inc(abcstart);
If abcstart > abclength+1 Then Begin
result := false;
Break;
End;
Continue;
End;
If ax[axstart] = "*" Then Begin
inc(axstart);
temp := 1;
axwww := axstart;
abcwww := abcstart;
Continue;
End;
If Not (ax[axstart] In ["?", "*"]) Then Begin //ccc
endpartax := Copy(ax, axstart, axlength - axstart + 1) + "?*";
If Pos("?", endpartax) < Pos("*", endpartax) Then Begin
subax := Copy(endpartax, 1, Pos("?", endpartax) - 1);
axstart := axstart + Pos("?", endpartax) - 1;
End
Else Begin
subax := Copy(endpartax, 1, Pos("*", endpartax) - 1);
axstart := axstart + Pos("*", endpartax) - 1;
End;
endpartabc := Copy(abc, abcstart, abclength - abcstart + 1);
If ((Pos(subax, endpartabc) <> 0) And (temp = 1)) Or ((Pos(subax, endpartabc) = 1) And (temp = 0)) Then Begin //ddd
If temp = 1 Then temp := 0;
abcstart := abcstart + (Pos(subax, endpartabc) + Length(subax) - 1);
End
Else Begin //ddd
If temp = 0 Then Begin
axstart := axwww;
abcwww := abcwww + 1;
abcstart := abcwww;
temp := 1;
Continue;
End;
result := false;
Break;
End; //ddd
End; //ccc
End; //bbb
End; //aaa