读书人

delphi通配符有关问题

发布时间: 2013-09-07 14:12:44 作者: rapoo

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;


[解决办法]
你这是过滤
pos是定位,循环+定位才是过滤
[解决办法]
没用过,不过建议你下载个正则表达式控件TPerlRegEx,不用安装直接引用就可以用

读书人网 >.NET

热点推荐