function TForm1.GetLink(const content, regular: string): LinkInfo;
var
  link: LinkInfo;begin  regex.Subject := content;
  regex.regex := regular;
  if regex.Match then
  begin
    link.url := regex.SubExpressions[regex.NamedSubExpression('url')];
    link.Title := regex.SubExpressions[regex.NamedSubExpression('title')];
  end;  Result :=link;
end;regex是在form.create中建立的再Destory中free
但是我发现并不能这样.每次匹配得create free一个perlregex对象.如果按上边的方法.高度的时候老是弹出cpu窗口.单独运行exe开始没问题.过一会就有问题了...

解决方案 »

  1.   

    procedure TPerlRegEx.CleanUp; 
    begin 
      FCompiled := False; FStudied := False; 
      pcre_dispose(pattern, hints, nil); 
      pattern := nil;            //这是我加的 
      hints := nil;              //这是我加的,加上这两句,就好了 
      ClearStoredSubExpressions; 
      OffsetCount := 0; 
    end; 
    procedure pcre_dispose(pattern, hints, chartable: Pointer); 
    begin 
      if pattern <> nil then pcre_free(pattern); 
      if hints <> nil then pcre_free(hints); 
      if chartable <> nil then pcre_free(chartable); 
    end; 问题出在 if pattern <> nil 这里,这样释放以后,并没有赋值nil 
    在CleanUp中添加两句代码,好了这样就不会出CPU窗口了,这是TPerlRegEx的一个Bug