delphi通配符问题
请问delphi中有通配符吗?怎样查找类似四位数中前两位是1或后两位是1,又或者只查找出任意位含5的所有四位数(假设四位为1000-9999),就像SQL中的like ‘11%’这样。
[解决办法]
字符串用pos函数匹配
[解决办法]
function MatchStr(const Pattern, Target: PChar): Boolean;
var
PatternPtr: PChar;
TargetPtr: PChar;
PatternRes: PChar;
TargetRes: PChar;
begin
Result := False;
PatternPtr := Pattern;
TargetPtr := Target;
PatternRes := nil;
TargetRes := nil;
repeat
{ 不以 * 开头的情况 }
repeat
case PatternPtr^ of
#0 :
begin
Result := TargetPtr^ = #0;
if Result or (TargetRes = nil) or (PatternRes = nil) then Exit;
TargetPtr := TargetRes;
PatternPtr := PatternRes;
Break;
end;
'*':
begin
Inc(PatternPtr);
PatternRes := PatternPtr;
Break;
end;
'?':
begin
if TargetPtr^ = #0 then Exit;
Inc(TargetPtr);
Inc(PatternPtr);
end;
else
if TargetPtr^ = #0 then Exit;
if TargetPtr^ <> PatternPtr^ then
begin
if (TargetRes = nil) or (PatternRes = nil) then Exit;
TargetPtr := TargetRes;
PatternPtr := PatternRes;
Break;
end
else
begin
Inc(TargetPtr);
Inc(PatternPtr);
end;
end;
until False;
{ 以 * 开头的情况 }
repeat
case PatternPtr^ of
#0 :
begin
Result := True;
Exit;
end;
'*':
begin
Inc(PatternPtr);
PatternRes := PatternPtr;
end;
'?':
begin
if TargetPtr^ = #0 then Exit;
Inc(TargetPtr);
Inc(PatternPtr);
end;
else
repeat
if TargetPtr^ = #0 then Exit;
if TargetPtr^ = PatternPtr^ then Break;
Inc(TargetPtr);
until False;
Inc(TargetPtr);
TargetRes := TargetPtr;
Inc(PatternPtr);
Break;
end;
until False;
until False;
end;