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开始没问题.过一会就有问题了...
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开始没问题.过一会就有问题了...
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