研究了半天还是没明白正则怎么写,比如我想获取qvod播放地址中的文件名
qvod://235928716|6A6329DA3ECF3DC2A5B299B5A98E8B3BDBD0877E|女拳粤语01.rmvb|我是用的regexpr,请问大侠如何获取“女拳粤语01.rmvb" ? 

解决方案 »

  1.   

    这个不用正则也可以处理啦~用TStringList就能分出来了
      

  2.   

    比如:
    SL:= TStringList.Create;
    SL.Delimiter:= '|';
    SL.DelimitedText:= 'qvod://235928716|6A6329DA3ECF3DC2A5B299B5A98E8B3BDBD0877E|女拳粤语01.rmvb|';
    for i:= 0 to SL.Count-1 do
      if pos('rmvb',SL.Strings[i]) > 0 then showmessage(SL.Strings[i]);再者直接取 SL.Strings[2];
      

  3.   


    qvod://\d*?\|[a-zA-Z0-9]*?\|(.*?)\|
      

  4.   

    XE下测试通过,用XE自带的RegularExpressions
    uses
      RegularExpressions;procedure TMainForm.Button1Click(Sender: TObject);
    var
      Str: string;
      Reg: TRegEx;
      Match: TMatch;
    begin
      Str := 'qvod://235928716|6A6329DA3ECF3DC2A5B299B5A98E8B3BDBD0877E|女拳 粤语01.rmvb|' + #13#10 +
      'qvod://235928716|6A6329DA3ECF3DC2A5B299B5A98E8B3BDBD0877E|女拳 粤语02.rmvb|';  Reg := TregEx.Create('qvod://\d*?\|[a-z0-9]*?\|(.*?)\|', [roIgnoreCase]);
      Match := Reg.Match(Str);
      while Match.Success do
      begin
        Memo1.Lines.Add(match.Groups[1].Value);
        Match := Match.NextMatch;
      end;
    end;
      

  5.   

    D7下测试通过。 
    uses
      RegExpr;procedure TForm1.Button1Click(Sender: TObject);
    var
      reg: TRegExpr;
    begin
      reg := TRegExpr.Create;
      reg.InputString := 'qvod://235928716|6A6329DA3ECF3DC2A5B299B5A98E8B3BDBD0877E|女拳 粤语01.rmvb|' + #13#10 +
      'qvod://235928716|6A6329DA3ECF3DC2A5B299B5A98E8B3BDBD0877E|女拳 粤语02.rmvb|\b';
      reg.Expression := '.*?\|.*?\|(.*?)\|';
      if reg.Exec then
      begin
        repeat
          Memo1.Lines.Add(reg.Match[1]);
        until not reg.ExecNext;
      end;
    end;