痴一居

    莫聽穿林打葉聲,何妨吟嘯且徐行。竹杖芒鞋輕勝馬,誰怕!一蓑煙雨任平生。料峭春風吹酒醒,微冷,山頭斜照卻相迎。回首向來蕭瑟...

如何在Delphi中使用正则表达式

    正则表达式最早是由数学家Stephen Kleene于1956年提出,他是在对自然语言的递增研究成果的基础上提出来的。具有完整语法的正则表达式使用  在字符的格式匹配方面上,后来被应用到熔融信息技术领域。
    正则表达式并非一门专用语言,但它可用于在一个文件或字符里查找和替代文本的一种标准。许多程序中都使用了正则表达式,但是作为我常用的编程工具之一的Delphi却没有直接提供对正则表达式的支持。郁闷之下,在网上进行了一番搜索研究之后,找到了以下几种在Delphi中使用正则表达式的方法。
    为了清楚的说明问题,我们以下面的例子来描述:
    已知网址:http://www.xcolor.cn/page1.htm
    求:链接中的文件名
    正确答案为:page1.htm

方法一 使用微软ScriptControl控件

  1. 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;
begin

memo2.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;
begin


try
// 转化为安全数组
Sarray := PSafeArray(TVarData(Params).VArray);
// 调用函数
Result := ScriptControl1.Run(FunctionName, Sarray);
except
on E: Exception do
begin
end;
end;

end;

 
方法二 使用微软RegExp
  1. 1. 下载并安装最新版的"Microsoft(r) Windows(r) Script"
  1. 2. RegExp包含在vbscript.dll中所以我们必须先注册regsvr32 vbscript.dll

注(安装了Ie5后默认已经包含该控件)

  1. 3.在Delphi中引入"Microsoft VBScript Regular Expressions"

主菜单->Project->Import type library->在列表中选择"Microsoft VBScript Regular Expressions"

生成TRegExp控件

  1. 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.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;

阅读更多
个人分类: DELPHI
想对作者说点什么? 我来说一句

java正则表达式综合应用

2012年01月09日 60KB 下载

Delphi XML 权威指南

2010年11月17日 9.36MB 下载

Delphi事件响应源码例程

2010年04月03日 630KB 下载

Delphi中读写TXT文件

2017年07月26日 1KB 下载

Java中如何使用正则表达式

2009年07月19日 8KB 下载

oracle正规表达式学习

2008年11月29日 2KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭