1.请问如何采集一个页面中,我想要的信息.
如一代码:
<img title='aaa'> 
<img title='bbb'>
请问我怎么取出title的信息既:'aaa','bbb'.
当然实际遇到的不会这么简单,所以要求要用正则表达式解决.
2.请问用mes:=idhttp.get('http://www.a.com').
shomessage(mes)一看经常会出现部分代码而已,但实际所以代码
已经存在与mes中.我想问如果是只出现部分的情况,我直接拿这个
mes去正则表达式分析回有问题吗?如果会怎么解决.
分数不够我可以再加.希望会的帮帮谢谢........

解决方案 »

  1.   

    1 试试这个\<img [^>]*?title=['"]([^'"]*)['"][^>]*>2 shomessage可能显示不完全,只要你能确定拿到的是完整的就可以。
      

  2.   

    "akirya"谢谢你的解答.
    不好意思,正则表达式我还不太会使用.可不可以麻烦你写个简单的例子.
    随便采一个页面,这要把这个页面中所有<a>的href找出来就可以了.
    谢谢~~
      

  3.   

    我也没在Delphi中用正则,这是工具生成的代码。// You can download the TPerlRegEx component from
    // http://www.regular-expressions.info/delphi.html
    uses PerlRegEx;
    var
    Regex: TPerlRegEx;
    GroupIndex: Integer;Regex := TPerlRegEx.Create(nil);
    Regex.RegEx := '\<a [^>]*href=[''"]([^''"]*)[''"][^>]*>';
    Regex.Options := [preMultiLine];
    Regex.Subject := SubjectString;
    if Regex.Match then begin
    repeat
    for GroupIndex := 0 to Regex.SubExpressionCount do begin
    // backreference text: Regex.SubExpressions[GroupIndex];
    // backreference start: Regex.SubExpressionOffsets[GroupIndex];
    // backreference length: Regex.SubExpressionLengths[GroupIndex];
    end;
    until not Regex.MatchAgain;
    end;
      

  4.   

    我用的是Andrey V. Sorokin的TRegExpr class library
    以下是测试程序:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      s:string;
      r:TRegExpr;
      i:integer;
    begin
       s:='<img title=''aaa''>'
          +'<img title=''bbb''>'
          +'<img title=''ccc''>';
       r:=TRegExpr.Create;
       r.Expression:='<img *title=''([^'']+)''';
       if r.Exec(s) then
       begin
         Memo1.Lines.Add(r.Match[1]);
         while (r.ExecNext) do
           Memo1.Lines.Add(r.Match[1]);
      end;
    end;结果在memo1中显示
    aaa
    bbb
    ccc
      

  5.   

    恩谢谢.
    我试了.
    但当我用
        idhtp1:= TidHttp.Create(nil);
       s:=idHttp.Get('http://www.abc.cn');
       r:=TRegExpr.Create;
       r.Expression:='<img *title=''([^'']+)''';
       if r.Exec(s) then
       begin
         Memo1.Lines.Add(r.Match[1]);
         while (r.ExecNext) do
           Memo1.Lines.Add(r.Match[1]);
       end;
    他就取不到任何信息.
    可不可以麻烦帮解决下.