| 正则表达式最早是由数学家 Stephen Kleene 于 1956 年提出 , 他是在对自然语言的递增研究成果的基础上提出来的。具有完整语法的正则表达式使用 , , 后来被应用到熔融信息技术领域。 正则表达式并非一门专用语言 , 但它可用于在一个文件或字符里查找和替代文本的一种标准。许多程序中都使用了正则表达式, 但是作为我常用的编程工具之一的 Delphi 却没有直接提供对正则表达式的支持。郁闷之下 , 在网上进行了一番搜索研究之后 , 找到了以下几种在 Delphi 中使用正则表达式的方法。 为了清楚的说明问题 , 我们以下面的例子来描述: 已知网址: http://www.xcolor.cn/page1.htm 求:链接中的文件名 正确答案为 : Page1.htm 方法一 使用微软 ScriptControl 控件1. 编写一个脚本文件 (test.vbs) , 里面包含要使用的正则表达式函数 |
| função geturlfile (url) Set reGObject = novo regexp com regobject .Pattern = "/w+/./W+(?!.)" .Ignorecase = true .Global = true Termine com as correspondências set = regubject.execute (url) se corresponde.count> 0 Então Para cada mach em fósforos geturlfile = mach.value Próximo Fim se definido regobject = nada Função final |
|
2. 下载最新版的 "Microsoft (R) Windows (R) Script" 你可以在以下地址找到下载 |
3. 安装 Microsoft (R) Windows (R) ScriptVisual Basic (R) Edição de Script (VBScript.) Versão 5.6, Jscript (R) versão 5.6, componentes de script do Windows, Windows Script Host 5.6, Windows Script Runtime Versão 5.6. 将被安装到你的系统中
|
4. 在 Delphi 中导入 msScript.ocx, 生成 tScriptControl 控件 |
5. 使用以下代码调用 tScriptControl |
Procedimento TForm1.Button2Click (remetente: TOBJECT); var A: Olevariant; começar memor2.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'; memor1.lines.add (Callfunction ('geturlfile', a)); fim; function tform1.callfunction (const functionName: string; Const Params: Olevariant): Olevariant; var Sarray: Psafearray; começar tentar // 转化为安全数组 Sarray: = PSAFeArray (TVardata (params) .Varray); // 调用函数 Resultado: = scriptControl1.run (FunctionName, Sarray); exceto em e: exceção do começar fim; fim; fim; | |
| 方法二 使用微软 regexp |
1. 下载并安装最新版的 "Microsoft (R) Windows (R) Script" |
2. Regexp 包含在 vbscript.dll 中所以我们必须先注册 regsvr32 vbscript.dll 注 (安装了 ie5 后默认已经包含该控件) |
3. 在 Delphi 中引入 "Microsoft VBScript Expressões regulares" 主菜单-> Project-> Importar tipo biblioteca-> 在列表中选择 "Microsoft VBScript Expressões regulares" 生成 Tregexp 控件 |
4. 使用以下代码调用 Tregexp 控件 |
procedimento TForm1.Button1Click (remetente: TOBJECT); var Machs: iMatchCollection; Matchs: Match; envio: isubmatches; I, J: Inteiro; começar Regexp1.global: = true; Regexp1.pattern: = '/w+/./W+(?!.)'; Regexp1.ignorecase: = true; machs: = regexp1.execute ('http://www.xcolor.cn/dd/page1.htm') como IMatchCollection; para i: = 0 para machs.count - 1 do começar Correspondências: = machs.item [i] como correspondência; envio: = matchs.submatches como isubmatches; memando1.lines.add (matchs.value); // para j: = 0 para submatir.count -1 do // memo1.lines.add (submatch.item [j]) fim; fim; |
|