问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

delphi中VBspcript_TRegExp类(正则表达式)怎么用

发布网友 发布时间:2022-06-28 12:56

我来回答

1个回答

热心网友 时间:2023-10-09 14:56

这个vb script Regular Expression 5.5对象是IE5.5自带的,所以很方便引用。首先介绍一下这个对象 只要你的服务器安装了IE5.x,就会带VBscript5.5。其实,“正则表达式”原本是Unix下面的专利,尤其是在Perl语言中使用的最为广泛,正是由于“正则表达式”的强大功能,才使得微软慢慢将正则表达式对象移植到了视窗系统上面,利用“正则表达式”对象,我们就可以非常方便的对各种数据进行合法性的校验了。   首先,让我们来了解一下究竟什么是VBscript的“正则表达式”对象,我们先来看一段程序: Function CheckExp(patrn, strng) Dim regEx, Match   建立变量。 Set regEx = New RegExp 建立正则表达式对象 regEx.Pattern = patrn 设置模式 regEx.IgnoreCase = true 设置是否区分字符大小写。 regEx.Global = True 设置全局可用性。 Matches = regEx.test(strng)      执行搜索,matches是布尔值 CheckExp = matches End Function 在这段程序程序中,我们看到可以使用“New RegExp”来得到一个正则表达式对象,然后对这个对象进行正则匹配模板的赋值,也就是告诉正则表达式对象,你想要匹配一个什么样子的模板,然后使用方法Test来检测待处理的数据究竟和我们给出的模版是否相匹配,如果不匹配,那就表明待处理的数据不是合法的数据,从而也就实现了数据合法性的校验,我们可以看出,使用一个设计合理的匹配模板,我们可以轻松的校验一批格式类似的数据信息。   当然,VBscript5.0中的“正则表达式”对象还有很多的其他的方法和属性,比如方法Replace(),利用他我们就可以很快的实现现在网上很时髦的UBB风格的论坛以及BBS,这不在我们讨论范围之内,以后再加以论述,我们现在就看看在数据校验方面正则表达式对象常用的方法和属性: 常用方法: Execute 方法 描述:对指定的字符串执行正则表达式搜索。 语法:object.Execute(string)   Execute 方法的语法包括以下几个部分: object:必需的。总是一个 RegExp 对象的名称。 string:必需的。要在其上执行正则表达式的文本字符串。 说明:正则表达式搜索的设计模式是通过 RegExp 对象的 Pattern 来设置的。Execute 方法返回一个 Matches 集合,其中包含了在 string 中找到的每一个匹配的 Match 对象。如果未找到匹配,Execute 将返回空的 Matches 集合。 Test方法 描述:对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。 语法:object.Test(string) Test 方法的语法包括以下几个部分: 说明:正则表达式搜索的实际模式是通过RegExp对象的Pattern属性来设置的。RegExp.Global属性对Test方法没有影响。如果找到了匹配的模式,Test方法返回True;否则返回False。 常用属性: Global属性 描述:设置或返回一个 Boolean 值,该值指明在整个搜索字符串时模式是全部匹配还是只匹配第一个。 语法:object.Global [= True | False ] object 参数总是 RegExp 对象。如果搜索应用于整个字符串,Global 属性的值为 True,否则其值为 False。默认的设置为 True。 IgnoreCase属性 描述:设置或返回一个Boolean值,指明模式搜索是否区分大小写。 语法:object.IgnoreCase [= True | False ] object 参数总是一个 RegExp 对象。如果搜索是区分大小写的,则 IgnoreCase 属性为 False;否则为 True。缺省值为 True。 Pattern属性 描述:设置或返回被搜索的正则表达式模式。 这是一个最重要的属性,我们主要是设置这个属性来实现数据校验的。 语法:object.Pattern [= "searchstring"] Pattern 属性的语法包含以下几个部分: object:必需的。总是一个 RegExp 对象变量。 searchstring:可选的。被搜索的正则字符串表达式。它可能包含设置部分表格中的各种正则表达式字符。 设置:在书写正则表达式的模式时使用了特殊的字符和序列。下表描述了可以使用的字符和序列,并给出了实例。 字符描述: \:将下一个字符标记为特殊字符或字面值。例如"n"与字符"n"匹配。""与换行符匹配。序列"\\"与"\"匹配,"\("与"("匹配。 ^ :匹配输入的开始位置。 $ :匹配输入的结尾。 * :匹配前一个字符零次或几次。例如,"zo*"可以匹配"z"、"zoo"。 + :匹配前一个字符一次或多次。例如,"zo+"可以匹配"zoo",但不匹配"z"。 ? :匹配前一个字符零次或一次。例如,"a?ve?"可以匹配"never"中的"ve"。 .:匹配换行符以外的任何字符。 (pattern) 与模式匹配并记住匹配。匹配的子字符串可以从作为结果的 Matches 集合中使用 Item [0]...[n]取得。如果要匹配括号字符(和 ),可使用"\(" 或 "\)"。 x|y:匹配 x 或 y。例如 "z|food" 可匹配 "z" 或 "food"。"(z|f)ood" 匹配 "zood" 或 "food"。 {n}:n 为非负的整数。匹配恰好n次。例如,"o{2}" 不能与 "Bob 中的 "o" 匹配,但是可以与"foooood"中的前两个o匹配。 {n,} :n 为非负的整数。匹配至少n次。例如,"o{2,}"不匹配"Bob"中的"o",但是匹配"foooood"中所有的o。"o{1,}"等价于"o+"。"o{0,}"等价于"o*"。 {n,m} :m 和 n 为非负的整数。匹配至少 n 次,至多 m 次。例如,"o{1,3}" 匹配 "fooooood"中前三个o。"o{0,1}"等价于"o?"。 [xyz] :一个字符集。与括号中字符的其中之一匹配。例如,"[abc]" 匹配"plain"中的"a"。 [^xyz] :一个否定的字符集。匹配不在此括号中的任何字符。例如,"[^abc]" 可以匹配"plain"中的"p". [a-z] :表示某个范围内的字符。与指定区间内的任何字符匹配。例如,"[a-z]"匹配"a"与"z"之间的任何一个小写字母字符。 [^m-z] :否定的字符区间。与不在指定区间内的字符匹配。例如,"[m-z]"与不在"m"到"z"之间的任何字符匹配。 \b :与单词的边界匹配,即单词与空格之间的位置。例如,"er\b" 与"never"中的"er"匹配,但是不匹配"verb"中的"er"。 \B :与非单词边界匹配。"ea*r\B"与"never early"中的"ear"匹配。 \d :与一个数字字符匹配。等价于[0-9]。 \D :与非数字的字符匹配。等价于[^0-9]。 \f :与分页符匹配。 \n:与换行符字符匹配。 \r:与回车字符匹配。 \s :与任何白字符匹配,包括空格、制表符、分页符等。等价于"[ \f\t\v]"。 \S :与任何非空白的字符匹配。等价于"[^ \f\t\v]"。 \t :与制表符匹配。 \v :与垂直制表符匹配。 \w :与任何单词字符匹配,包括下划线。等价于"[A-Za-z0-9_]"。 \W :与任何非单词字符匹配。等价于"[^A-Za-z0-9_]"。 \num :匹配 num个,其中 num 为一个正整数。引用回到记住的匹配。例如,"(.)\1"匹配两个连续的相同的字符。 \n:匹配 n,其中n 是一个八进制换码值。八进制换码值必须是 1, 2 或 3 个数字长。 例如,"\11" 和 "\011" 都与一个制表符匹配。"\0011"等价于"\001" 与 "1"。八进制换码值不得超过 256。否则,只有前两个字符被视为表达式的一部分。允许在正则表达式中使用ASCII码。 \xn:匹配n,其中n是一个十六进制的换码值。十六进制换码值必须恰好为两个数字长。例如,"\x41"匹配"A"。"\x041"等价于"\x04" 和 "1"。允许在正则表达式中使用 ASCII 码。 --------------------------------------------------------------------------- 下面讲如何在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 5.5" 注意:是import type library,而不是component-import activeX control 我的机器上有两个版本,一个1.0,一个5.5, 路径分别为system32\vbscript.dll\2, system32\vbscript.dll\3 这个2,3应该指版本, Class Name一栏中有三个类:TRegExp,TMatch, TMatchCollection Pallete Page 我选择装到Sample页面上, Unit dir Name:D:\Program Files\Borland\Delphi7\Imports\,保持不变。 最后按“install”按钮,会生成安装包文件,我选择新建了目录:E:\Component\Vbscript Regex,这个dpk文件是个wrapper,用的是Imports目录中的VBScript_RegExp_55_TLB单元。 done!生成TRegExp控件。 使用控件 任务:字符串转换格式,原来的格式是每条数据以%开头,中间有三个字段,以"分隔,如: %"1-1"李应林"鄞州一中队" %"1-2"李应林"鄞州一中队" 要转换为用逗号分隔,如1-1,李应林,鄞州一中队 首先在窗体中拖一个TRegExp var colMatches: IMatchCollection; //匹配对象集合 objMatch: Match; //一个匹配对象 subMatch: ISubMatches; //子匹配对象,就是分组 i, j, k: integer; begin RegExp1.Global := true; RegExp1.Pattern := '%"(\d{1,2}-\d{1,2})"([^"]+)"([^"]+)"'; RegExp1.IgnoreCase := true; colMatches := RegExp1.Execute(strs[i]) as IMatchCollection; for j := 0 to colmatches.Count - 1 do begin objMatch := colMatches.Item[j] as Match; submatch := objMatch.SubMatches as ISubMatches; for k:=0 to submatch.Count -1 do Str:=Str + ',' + submatch.Item[k]; Listbox1.Items.Add(copy(Str,2,length(str))); end; end;
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
莲花冬天发芽好吗 过冬荷花什么时候发芽 一个手机号怎样登陆两个孩子的长沙市中小学生人人通云平台 人人通怎么进入学校 人人通电脑版学生怎样登录 名侦探柯南真人版3为什么要换人? 真人版柯南,你最喜欢小栗旬还是沟端淳平? 央企中国稀土集团落户江西,衷心希望江西摆脱“环江西经济带”地位_百度... 来天津的央企有哪些 东丽区的央企有哪些 吃虾有哪些小技巧? 山东肽康商贸有限公司是不是骗人的? 山东肽谷生物科技有限公司怎么样? 相奸游戏2的登场人物 本月动漫主角排行榜 日本动漫最新排名,最受欢迎的20强女动漫人物是谁 MOTO E2 能用那些存储卡 Moto e2手机内存卡找不到 求助!!! MOTO E2手机内存卡的问题!!在线等!! MOTO E2放多大内存卡合适? 求助摩托罗拉e2内存卡问题 moto E2内存卡和其他手机一样吗? moto E2手机读不出内存卡问题 摩托罗拉E2手机的内存卡是那种类型的内存卡??? 摩托罗拉E2支持哪种格式的内存卡 怎么做云吞馅 怎样做肉云吞馅 为什么yy女主播在网络直播室时那么的美,可是现实中那么丑,丑的不能要,他们是怎么做到的,跟直播设备 张纪中娇妻直播显憔悴,怎样才能保持美丽容颜? 我公司是一个具有独立法人资格的有限公司,想设立研发中心,请问程序要怎样走?? delphi的正则表达式子串替换 delphi Delphi中如何使用正则表达式,不要控件。我认为它不会不支持的。 Delphi语言怎样验证正则表达式本身是否正确? delphi 正则表达式 取网页内容 百度知道-delphi2010正则表达式请教 delphi 正则表达式使用变量的问题 身高178 体重120斤能踩开利拉德6代吗? 新一代n卡对这代全战提升大吗 现在最新型号的N卡是什么? 只想玩玩单机游戏,大家推荐个。 win11可以用最新n卡驱动吗 新型号的N卡有双核的么? 河南郑州郑州素质拓展选哪里好? 20g是什么高速信号 手机在高速公路有没有信号? 小学英语班毕业座谈会学生演讲稿(不回答我就完了!!) 把直接叙述改成间接叙述 .1、老师对我说:“学校让你明天参加小学生座谈会。” 老师对王芳说:“学校让你明天出席区小学升座谈会。”陈述句改转述句,急用! 吨和千克的进率是10 华为智慧屏se55能看3D电影吗- 问一问 坤云宁暖宫贴会排除淤血吗?来例假时能否贴暖宫贴?