首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi通配符有关问题

2013-09-07 
delphi通配符问题请问delphi中有通配符吗?怎样查找类似四位数中前两位是1或后两位是1,又或者只查找出任意

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,不用安装直接引用就可以用

热点排行