Delphi使用正则表达式
2006-09-21 下午 04:24
//轉自:阿勇的BLOG;
//http://www.ainlife.cn 羡慕VB,VBA中那些功能超强又方便的正则表达式吗?如果delphi中也能有那个就好了,可是。。。。好像delphi没有这个功能呢,呵呵,看看我们如何来利用VBScript.dll这个COM组件来完成在Delphi中使用正则表达式的。 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); var machs: IMatchCollection; Matchs: Match; submatch: ISubMatches; i, j: integer; begin RegExp1.Global := true; RegExp1.Pattern := ’/w+/./w+(?!.)’; RegExp1.IgnoreCase := true; machs := RegExp1.Execute(’ http://www.ainlife.cn/index.asp’) 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); end; end; 以上是网上流传的资料,我通过这点资料,写了如下代码,需要引用ComObj单元。 procedure TForm1.Button1Click(Sender: TObject); var Matches, MyTest: OleVariant; NewTestStr, TestStr: string; i: integer; begin TestStr := '网址: http://www.ainlife.cn/ 电话:0728-4576983'; MyTest := CreateOleObject('VBScript.RegExp'); MyTest.Global := True; MyTest.IgnoreCase := True; MyTest.Pattern := '[/d]{3,4}-[/d]{6,11}'; //匹配一个电话号码 if MyTest.Test(TestStr) then ShowMessage('找到了电话号码'); Matches := MyTest.Execute(TestStr); //执行查找; for i := 1 to Matches.count do //显示找到的结果 begin ShowMessage(Format('找到的第%d个:%s', [i, Matches.item[i - 1]])) end; NewTestStr := MyTest.Replace(TestStr, '0769-85787641'); ShowMessage(NewTestStr); end; 其实以上两种办法同出一辙,几乎没有任何区别 |