| 正则表达式最早是由数学家 Stephen Kleene 于 1956 年提出 , 他是在对自然语言的递增研究成果的基础上提出来的。具有完整语法的正则表达式使用 在字符的格式匹配方面上 , 后来被 后来被应用到熔融信息技术领域。 正则表达式并非一门专用语言 , 但它可用于在一个文件或字符里查找和替代文本的一种标准。许多程序中都使用了正则表达式, 但是作为我常用的编程工具之一的 Delphi 却没有直接提供对正则表达式的支持。郁闷之下 , 在网上进行了一番搜索研究之后 , 找到了以下几种在 Delphi 中使用正则表达式的方法。 为了清楚的说明问题 , 我们以下面的例子来描述 : 已知网址: http://www.xcolor.cn/page1.htm 求 :链接中的文件名 正确答案为 : Seite1.htm 方法一 使用微软 scriptControl 控件1. 编写一个脚本文件 (test.vbs) , 里面包含要使用的正则表达式函数 |
| Funktion geturlfile (URL) Setzen .Pattern = "/w+/./W+(?!.)" .Innorecase = true .Global = true Ende mit Set Matchs = RegObject.execute (URL) if matchs.count> 0 Dann Für jede Mach in Matchs Geturlfile = Mach.Value Nächste Ende, wenn RegObject = nichts festlegen Endfunktion |
|
2. 下载最新版的 "Microsoft (R) Windows (R) -Skript" 你可以在以下地址找到下载 |
3. 安装 Microsoft (R) Windows (R) Skriptvisual Basic (R) Skript Edition (VBScript.) Version 5.6, Jscript (R) Version 5.6, Windows -Skriptkomponenten, Windows -Skript -Host 5.6, Windows -Skript -Laufzeitversion 5.6. 将被安装到你的系统中
|
4. 在 Delphi 中导入 msscript.ocx, 生成 TscriptControl 控件 |
5. 使用以下代码调用 TscriptControl |
Procedure tform1.button2click (Absender: tobject); var A: olevariante; beginnen memo2.lines.loadFromFile ('test.vbs'); scriptControl1.Ulovery: = 'vbscript'; ScriptControl1.addcode (string (memo2.text)); A: = vararraycreate ([0, 0], varvariante); a [0]: = 'http://www.xolor.cn/page1.htm'; memo1.lines.add (Callfunction ('GeturlFile', a)); Ende; Funktion tform1.Callfunction (const FunktionName: String; const params: olevariante): olevariant; var Sarray: PSAFEARRAY; beginnen versuchen // 转化为安全数组 Sarray: = psafearray (TVARDATA (Params) .Varray); // 调用函数 Ergebnis: = scriptControl1.run (FunktionName, Sarray); außer auf e: Ausnahme tun beginnen Ende; Ende; Ende; | |
| 方法二 使用微软 regexp |
1. 下载并安装最新版的 "Microsoft (R) Windows (R) -Skript" |
2. Regexp 包含在 vbscript.dll 中所以我们必须先注册 regsvr32 vbscript.dll 注 (安装了 IE5 后默认已经包含该控件) |
3. 在 Delphi 中引入 "Microsoft VBScript reguläre Ausdrücke" 主菜单-> project-> importtypbibliothek-> 在列表中选择 "microsoft vbscript reguläre Ausdrücke" 生成 tregexp 控件 |
4. 使用以下代码调用 Tregexp 控件 |
procedure tform1.button1click (Absender: tobject); var Machs: ImatchCollection; Matchs: Match; Submatch: Isubmatches; Ich, J: Ganzzahl; beginnen Regexp1.global: = true; Regexp1.pattern: = '/w+/./W+(?!.)'; Regexp1.InnoreCase: = true; machs: = regexp1.execute ('http://www.xcolor.cn/dd/page1.htm') als ImatchCollection; für i: = 0 bis mach.count - 1 tun beginnen Übereinstimmungen: = Machs.item [i] als Übereinstimmung; Submatch: = Matches.SubMatches As IsubMatches; memo1.lines.add (Matchs.Value); // für j: = 0 bis submatch.count -1 do // memo1.lines.add (submatch.item [j]) Ende; Ende; |
|