大家帮看看,谢.请问,如何提取以下字符串的URL和文字?如:<a href="ddd.htm">测试</a>如何取出ddd.htm,测试 这两个字符?谢了.

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      str, str1, str2: string;
    begin
      str := '<a href="ddd.htm">测试</a>';
      str1 := copy(str, Pos('="', str)+2, Pos('">', str)-Pos('="', str)-2);
      //showMessage(str1);
      str2 := copy(str, Pos('">', str)+2, Pos('</a>', str)-Pos('">', str)-2);
      //showMessage(str2);
    end;
      

  2.   

    var
      s:string;
      TS:Tstrings;
    begin
      s:='<a href="ddd.htm">测试</a>';
      TS:=TStringList.Create;
      TS.Delimiter:='"';
      TS.DelimitedText:=s;
      ShowMessage(TS.Strings[2]);
    end;
      

  3.   

    回cuteant, Ciny_Cou:你们的方法都挺好,可是在处理一些复杂的语句就过不了啊?帮忙看看.谢.<A class=black onmousewheel=keep(); href="music/1.html" target=_blank><Font color=red>测试</font></a>请问,如何取出 music/1.html, 测试  这两个字符啊?这个问题我弄了好多天了...在线等..谢.
      

  4.   

    music/1.html这个好办,他有格式(规律)可循:都在href=后面的两个双引号之间,但测试两字从你给的例子中看不出格式(规律),没有格式(规律)是不可能做出适合的判断的
      

  5.   

    回NightCloud:你好那请问可不可以取出href=后,""中的字符(即URL),再取出</a>前的中文字符(即链接)?谢.
      

  6.   

    下面是获取url的一个方法:
    假设你的字符串赋给变量sTemp
    point_href:=pos('href="',sTemp);
    delete(sTemp,1,point_href-1+6);//6为href="的长度
    url:=copy(sTemp,1,pos('"',sTemp)-1);
    showmessage(url)
    至于测试,你只有一个定位终止的条件(</a>前),没有定位开始的条件,我觉得还是不能做到
      

  7.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      str: string;
      i: integer;
      leftChr: char;
      stat: string;
      rstr: string;
    begin
      leftChr := #0;
      rstr := '';
      str := '<A class=black onmousewheel=keep(); href="music/1.html" target=_blank><Font color=red>测试</font></a>';
      for i:=1 to Length(str) do
      begin
        if (str[i]='<') or (str[i]='>') then
        begin
          if rstr<>'' then break;
          leftChr := str[i];
        end;
        if (str[i]<>'<') and (str[i]<>'>') then
          if leftChr='>' then rstr := rstr + str[i];
      end;
      showMessage(rstr);
    end;这个可以取出'测试',要取出music/1.html的话,如果是很规范的,在两个双引号之间,就用 Ciny_Cou(我一路狂奔.. 渴望在擁擠匆忙的人群裏找到.. 壹個和我)的方法:
    var
      s:string;
      TS:Tstrings;
    begin
      s:='<A class=black onmousewheel=keep(); href="music/1.html" target=_blank><Font color=red>测试</font></a>';
      TS:=TStringList.Create;
      TS.Delimiter:='"';
      TS.DelimitedText:=s;
      ShowMessage(TS.Strings[2]);
    end;
      

  8.   

    下面是获取url的一个方法:
    假设你的字符串赋给变量sTemp
    point_href:=pos('href="',sTemp);
    delete(sTemp,1,point_href-1+6);//6为href="的长度
    url:=copy(sTemp,1,pos('"',sTemp)-1);
    showmessage(url)
    至于测试,你只有一个定位终止的条件(</a>前),没有定位开始的条件,我觉得还是不能做到
      

  9.   

    我给的程序的原理是这样的,遇到<之后就说明后面的字符是Html控制语句,那么就等>出现后再来判断是不是普通字符。当然,这段程序也有很大局限性,如果你的普通字符分成两部分就不行了,例如<A class=black onmousewheel=keep(); href="music/1.html" target=_blank><Font color=red>测</font><font color=blue>试</font></a>,那就需要修改一下刚才的程序了,把 if rstr<>'' then break;去掉就行了。
      

  10.   

    参考,可以对字符串截断
    从服务器获取登录结果信息:结构体:(Client)
    type UserLoginResult = record
          lResult: string;
         lSort: integer;
        lPackType:string;
       end;
    分解登录结果:
       lString := csUserLogin.Socket.ReceiveText;
       with RUserLoginResult do
       begin
          lResult := copy(lString, 1, pos('|', lString) - 1);
          lString := copy(lString, pos('|', lString) + 1, length(lString));
          if strtoint(lResult) = 1 then
           lSort := strtoint(copy(lString,1,pos('|',lString)-1));
       end;
      

  11.   

    谢楼上各位高人帮忙.回cuteant:Ciny_Cou的方法只能取规则的,不能取不规则的URL啊?我也在想办法.如果还有高人路过,请帮看看,还有什么方法吗?谢.在线等.........如以下字符,如何取得里面的URL?谢.<a href="music/openfile.html">测试1</a>'
    <a onclick=open(); href="http://www.baidu.com/music">测试2</a>
    <a href=http://www.china.com/music/index.asp class=bb>测试3</a> 
    <a HREF=musiclist.htm target=_blank><font color=red>测试4</font></a>
      

  12.   

    没有引号也可以啊,你先查找'href=',然后遇到空格就完成
    至于你说的HREF和href,可以把Pos函数改为不区分大小写的如果有需要,我可以帮你完成,,不过相信有了这些提示,你自己应该可以写完的了。
      

  13.   

    好了,帮你写完了,现在应该完全可以解决了。procedure TForm1.Button3Click(Sender: TObject);
    var
      str: string;
      i: integer;
      leftChr: char;
      rstr1, rstr2: string;
    function SPos(t, s: string): integer;
    begin
      Result := Pos(AnsiLowerCase(t), AnsiLowerCase(s));
    end;
    begin
      leftChr := #0;
      rstr1 := '';
      str := '<A class=black onmousewheel=keep(); href="music/1.html" target=_blank><Font color=red>测试</font></a>';  rstr2 := Copy(str, SPos('href=', str)+5, Length(str));
      rstr2 := Copy(rstr2, 1, SPos(' ', rstr2)-1);
      rstr2 := Trim(StringReplace(rstr2, '"', '', [rfReplaceAll]));
      showMessage(rstr2);  for i:=1 to Length(str) do
      begin
        if (str[i]='<') or (str[i]='>') then
        begin
          if rstr1<>'' then break;
          leftChr := str[i];
        end;
        if (str[i]<>'<') and (str[i]<>'>') then
          if leftChr='>' then rstr1 := rstr1 + str[i];
      end;
      showMessage(rstr1);end;
      

  14.   

    再修改一下,调用strProc函数就可以了。
    procedure TForm1.Button3Click(Sender: TObject);
    procedure strProc(str: string);
    var
      i: integer;
      leftChr: char;
      rstr1, rstr2: string;
    function SPos(t, s: string): integer;
    begin
      Result := Pos(AnsiLowerCase(t), AnsiLowerCase(s));
    end;
    begin
      leftChr := #0;
      rstr1 := '';
      rstr2 := Copy(str, SPos('href=', str)+5, Length(str));
      if SPos(' ', rstr2)=0 then
        rstr2 := Copy(rstr2, 1, SPos('>', rstr2)-1)
      else
        rstr2 := Copy(rstr2, 1, SPos(' ', rstr2)-1);
      rstr2 := Trim(StringReplace(rstr2, '"', '', [rfReplaceAll]));
      showMessage(rstr2);  for i:=1 to Length(str) do
      begin
        if (str[i]='<') or (str[i]='>') then
        begin
          if rstr1<>'' then break;
          leftChr := str[i];
        end;
        if (str[i]<>'<') and (str[i]<>'>') then
          if leftChr='>' then rstr1 := rstr1 + str[i];
      end;
      showMessage(rstr1);
    end;
    begin
      strProc('<a href="music/openfile.html">测试1</a>');
      strProc('<a onclick=open(); href="http://www.baidu.com/music">测试2</a>');
      strProc('<a href=http://www.china.com/music/index.asp class=bb>测试3</a>');
      strProc('<a HREF=musiclist.htm target=_blank><font color=red>测试4</font></a>');
    end;