| 正则表达式最早是由数学家 Stephen Kleene 于 1956 年提出 , 他是在对自然语言的递增研究成果的基础上提出来的。具有完整语法的正则表达式使用 在字符的格式匹配方面上 , 后来被应用到熔融信息技术领域。 正则表达式并非一门专用语言 , 但它可用于在一个文件或字符里查找和替代文本的一种标准。许多程序中都使用了正则表达式, 但是作为我常用的编程工具之一的 Delphi 却没有直接提供对正则表达式的支持。郁闷之下 , 在网上进行了一番搜索研究之后 , 找到了以下几种在 Delphi 中使用正则表达式的方法。 为了清楚的说明问题 , : : 已知网址: http://www.xcolor.cn/page1.htm 求 :链接中的文件名 正确答案为 : Page1.htm 方法一 使用微软 ScriptControl 控件1. 编写一个脚本文件 (test.vbs) , 里面包含要使用的正则表达式函数 |
| fonction geturlfile (URL) SET REGOBject = new Regexp avec RegObject .Pattern = "/ w + /. / W + (?!.)" .IgnoreCase = True .Global = true Se terminer avec set correspond = regObject.execute (URL) si correspond.Count> 0 alors Pour chaque Mach en matchs geturlfile = mach.Value Suivant Fin si définissez RegObject = rien fonction finale |
|
2. 下载最新版的 "Microsoft (R) Script Windows (R)" 你可以在以下地址找到下载 |
3 et 3 安装 Microsoft (R) Windows (R) ScriptVisual Basic (R) Edition de script (VBScript.) Version 5.6, JScript (R) version 5.6, composants de script Windows, Script Windows Host 5.6, Script Windows Runtime version 5.6. 将被安装到你的系统中
|
4. 在 Delphi 中导入 MSScript.ocx, 生成 TscriptControl 控件 |
5. 使用以下代码调用 TscriptControl |
Procédure tform1.button2click (expéditeur: tobject); var R: Olevariant; commencer memo2.lines.loadFromFile ('test.vbs'); scriptControl1.language: = 'vbscript'; ScriptControl1.AddCode (String (Memo2.Text)); A: = VarArayCreate ([0, 0], Varvariant); a [0]: = 'http://www.xolor.cn/page1.htm'; memo1.lines.add (callfunction ('getUrlfile', a)); fin; fonction tform1.callFunction (const functionName: String; Const Params: Olevariant): Olevariant; var Sarray: PsaFearray; commencer essayer // 转化为安全数组 Sarray: = psaFearray (tvardata (params) .vArray); // 调用函数 Résultat: = scriptControl1.run (FunctionName, SARAY); sauf sur e: exception faire commencer fin; fin; fin; | |
| 方法二 使用微软 Regexp |
1. 下载并安装最新版的 "Script Microsoft (R) Windows (R)" |
2. Regexp 包含在 vbscript.dll 中所以我们必须先注册 regsvr32 vbscript.dll 注 (安装了 ie5 后默认已经包含该控件) |
3. 在 Delphi 中引入 "Microsoft Vbscript Expressions régulières" Imp |
4. 使用以下代码调用 Tregexp 控件 |
Procédure tform1.button1Click (expéditeur: tobject); var Machs: iMatchCollection; Matchs: Match; Submatch: ISUBMatches; I, J: entier; commencer Regexp1.global: = true; Regexp1.pattern: = '/ w + /. / W + (?!.)'; Regexp1.ignorecase: = true; machs: = regexp1.execute ('http://www.xcolor.cn/dd/page1.htm') comme IMatchCollection; pour i: = 0 à machs.Count - 1 do commencer Correspond: = machs.item [i] comme correspondant; Submatch: = MatchS.SubMatches comme ISUBMatches; memo1.lines.add (matchs.value); // pour j: = 0 à submmatch.count -1 do // memo1.lines.add (subsmatch.item [j]) fin; fin; |
|