天啊, 软件主要功能都几乎做完了, 却忽然发现这个第三方代码居然不支持零宽断言......我都快崩溃了, 我可不想用C#来重写一遍.......请大家帮帮忙 55555555555555

解决方案 »

  1.   

    微软的script控件,看看这是说明
    http://www.51windows.net/pages/vbscript/?url=/pages/vbscript/html/vsfctEval.htm
      

  2.   

    我一直用PerlRegEx空间,同时,利用RegexBuddy这个软件,可以调试表达式,并且生成多种语言的代码。
      

  3.   

    to theone_jxm():
    请问这个能在delphi下用吗? to moufer:
    我刚好也找到了PerlRegEx,但是还是有个问题,在用(<?! xxx)时,后面必须要跟定长的匹配串才行..不过比RegExpr强多了.不知道有没有更完美一点的呢?
      

  4.   

    方法一 使用微软ScriptControl控件
    1. 编写一个脚本文件(test.vbs),里面包含要使用的正则表达式函数  
     function GetUrlFile(Url)
        Set RegObject = New RegExp 
        With RegObject
        .Pattern = "\w+\.\w+(?!.)"
        .IgnoreCase = True
        .Global = True
        End With
        Set matchs =  RegObject.Execute(Url)
        If matchs.Count > 0 Then
            For Each mach in matchs
                GetUrlFile=mach.value
            Next
        End If
        Set RegObject = nothing
    end function  
     
    2. 下载最新版的"Microsoft(r) Windows(r) Script" 
    你可以在以下地址找到下载 3 . 安装Microsoft(r) Windows(r) Script
    Visual Basic(r) Script Edition (VBScript.) Version 5.6, 
    JScript(r) Version 5.6, Windows Script Components, 
    Windows Script Host 5.6, 
    Windows Script Runtime Version 5.6.将被安装到你的系统中 
    4 .在Delphi中导入MsScript.ocx ,生成TScriptControl控件 
    5.使用以下代码调用TScriptControl 
    procedure TForm1.Button2Click(Sender: TObject);
    var
    a: OleVariant;
    beginmemo2.Lines.LoadFromFile('test.vbs');
    ScriptControl1.Language := 'Vbscript';
    ScriptControl1.AddCode(string(memo2.Text));
    a := VarArrayCreate([0, 0], varVariant);
    a[0] := 'http://www.xolor.cn/page1.htm';
    memo1.Lines.Add(CallFunction('GetUrlFile', a));end; 
    function TForm1.CallFunction(const FunctionName: string;
    const Params: oleVariant): OleVariant;
    var
    Sarray: PSafeArray;
    begintry
    // 转化为安全数组
    Sarray := PSafeArray(TVarData(Params).VArray);
    // 调用函数
    Result := ScriptControl1.Run(FunctionName, Sarray);
    except
    on E: Exception do
    begin
    end;
    end;
    end;   
    方法二 使用微软RegExp 
    1. 下载并安装最新版的"Microsoft(r) Windows(r) Script" 
    2. RegExp包含在vbscript.dll中所以我们必须先注册regsvr32 vbscript.dll 
    注(安装了Ie5后默认已经包含该控件) 
    3.在Delphi中引入"Microsoft VBScript Regular Expressions" 
    主菜单->Project->Import type library->在列表中选择"Microsoft VBScript Regular Expressions"
    生成TRegExp控件 
    4.使用以下代码调用TRegExp控件 
    procedure TForm1.Button1Click(Sender: TObject);
    varmachs: IMatchCollection;
    Matchs: Match;
    submatch: ISubMatches;
    i, j: integer;
    begin
    RegExp1.Global := true;
    RegExp1.Pattern := '\w+\.\w+(?!.)';
    RegExp1.IgnoreCase := true;
    machs := RegExp1.Execute('http://www.xcolor.cn/dd/page1.htm') as
    IMatchCollection;
    for i := 0 to machs.Count - 1 do
    begin
    Matchs := machs.Item[i] as Match;
    submatch := Matchs.SubMatches as ISubMatches;
    memo1.Lines.Add(matchs.Value);
    //for j:=0 to submatch.Count -1 do
    // memo1.Lines.Add(submatch.Item[j])
    end;end;