《vbscript-regexp对象的详细用法》由会员分享,可在线阅读,更多相关《vbscript-regexp对象的详细用法(17页珍藏版)》请在金锄头文库上搜索。
1、VBScript-RegExp 对象的详细用法 分类: VBScriptJScript 2009-12-14 14:55 4765 人阅读 评论(2) 收藏 举报 RegExp对象是 VBScript中用于提供简单的正则表达式支持的对象。VBScript中所有和正则表达式有关的属性和方法都与这个对象有关联。Dim reSet re = New RegExp这个对象有三个属性和三个方法,如表 9-1所示。表 9-1Global 属性IgnoreCase 属性属 性Pattern 属性Execute 方法Replace 方法方 法Test 方法接下来的几节会深入地介绍这些属性和方法。此外还会介绍您
2、将在模式中用到的正则表达式符号。1 Global 属性Global属性负责设置或返回一个 Boolean值,指明模式是匹配整个字符串中所有与之相符的地方还是只匹配第一次出现的地方(参见表 9-2)。表 9-2代码 object.Global = value 对象 RegExp 对象值 有两个可能的值:True 和 False如果 Global 属性的值是 True,那就会对整个字符串进行查找;否则就不会。默认值是 False 并不是微软的某些文档中说的 True下面的例子利用 Global属性确保所有的in都会被修改。Dim re, sSet re = New RegExpre.Pattern
3、 = /binre.Global = Trues = The rain in Spain falls mainly on the plains.MsgBox re.Replace(s, in the country of)2 IgnoreCase 属性IgnoreCase属性负责设置或返回一个 Boolean值,指明模式匹配是否大小写敏感(参见表 9-3)。表 9-3代码 object.IgnoreCase = value 对象 RegExp 对象值 有两个可能的值:True 和 False如果 IgnoreCase 属性的值为 False,搜索为大小写敏感;如果是True,则不是。默认是 F
4、alse 并不是微软的某些文档中说的 True继续看这个例子,之前看过了 Global属性;如果要匹配的字符串中有“In”,就必须告诉 VBScript在进行匹配时要忽略大小写。Dim re, sSet re = New RegExpre.Pattern = /binre.Global = Truere.IgnoreCase = Trues = The rain In Spain falls mainly on the plains.MsgBox re.Replace(s, in the country of)3 Pattern 属性Pattern 属性设置或返回用于搜索的正则表达式( 参见表
5、 9-4)。前面所有的例子都用到了 Pattern。Dim re, sSet re = New RegExpre.Pattern = /binre.Global = Trues = The rain In Spain falls mainly on the plains.MsgBox re.Replace(s, in the country of)表 9-4代码 object.Pattern = searchstring对象 RegExp 对象搜索字符串 需要搜索的正则字符串表达式。可能含有一些正则表达式字符 可选的4 正则表达式字符正则表达式的强大并不是来自于用字符串做模式,而是在模式中使用
6、特殊字符。表 9-5列出了所有的这些字符,以及每个字符在代码中的作用。大写特殊字符的作用与相应的小写特殊字符的作用相反。表 9-5字 符 描 述/ 表示下一个字符是特殊字符或文字常量 匹配输入的开头$ 匹配输入的结尾* 匹配前一个字符零次或多次+ 匹配前一个字符一次或多次? 匹配前一个字符零次或一次. 匹配除换行符以外的任何单个字符(pattern) 匹配并记住这个模式。可以用0n从结果的 matches 集合中获取匹配到的字符串。要匹配括号本身,在前面加上斜杠 用/(或/)(?:pattern) 匹配但不捕获模式,也就是不会存储匹配结果供以后使用。这可以用于使用or字符(|)合并模式的不同部
7、分。例如,anomal(?:y|ies)比anomaly|anomalies要划算得多(?=pattern) 当所要搜索的字符串匹配了模式的开头部分时就接着匹配这一部分。这是一个非捕获匹配,也就是说不会保存匹配结果供以后使用。例如,Windows (?=95|98|NT|2000|XP|Vista)能匹配Windows Vista中的Windows 而不能匹配Windows 3.1中的 Windows(?!pattern) 与上一个相反,这会匹配模式中没有出现的内容。这是一个非捕获匹配,也就是说不会保存匹配结果供以后使用。例如,Windows (?=95|98|NT|2000|XP|Vista
8、)能匹配Windows 3.1中的 Windows 而不能匹配Windows Vista中的 Windowsx|y 匹配 x 或 y(续表) 字 符 描 述n 准确地匹配 n 次(n 必须是一个非负整数) n, 至少匹配 n 次(n 必须是一个非负整数 注意结尾的逗号 ) n,m 至少匹配 n 次,最多匹配 m 次(m 和 n 必须都是非负整数) xyz 匹配其中包括的任一个字符(xyz 表示一个字符集) xyz 匹配其中不包括的字符(xyz 表示一个字符集的补集) a-z 匹配指定范围内的字符(a-z 表示字符的范围) m-z 匹配指定范围以外的字符(m-z 表示指定范围的补集)/b 匹配一
9、个单词边界,这个位置在单词和空格之间/B 匹配一个非单词边界/d 匹配数字。等价于0-9/D 匹配非数字。等价于 0-9/f 匹配换页符/n 匹配换行符/r 匹配回车符/s 匹配空白,包括空格、制表符、换页符等。等价于 /f /n /r /t /v /S 匹配非空白的字符。等价于 /f /n /r /t /v /t 匹配制表符/v 匹配纵向制表符/w 匹配字母、数字,以及下划线。等价于 A-Za-z0-9_/W 匹配非字符数字。等价于 A-Za-z0-9/_/. 匹配./| 匹配|/ 匹配/ 匹配/ 匹配/ 匹配/ 匹配/( 匹配(/) 匹配)$ num 匹配 num,其中 num 是正整数。
10、返回匹配结果的引用/n 匹配 n,其中 n 是八进制转义符。八进制转义符的长度应为 1、2 或 3/uxxxx 匹配 UNICODE 形式的 ASCII 字符/xn 匹配 n,其中 n 是十六进制转义符。十六进制转义符必须是两位长度这其中很多代码都无需太多的说明,但是有些例子可能需要别人的帮助才能理解。匹配一类字符您已经见过一个简单的模式:re.Pattern = in它通常用来匹配一类字符。通过将需要匹配的字符放在方括号中就能实现。例如,下面这个例子将单个数字换成更通用的术语。Dim re, sSet re = New RegExpre.Pattern = 23456789s = Spain
11、 received 3 millimeters of rain last week.MsgBox re.Replace(s, many)这段代码的输出如图 9-11所示。图 9-11在这个例子中,数字“3”被替换成了文本“many”。正如您所期望的,可以指定一个范围来缩短这个模式。这个模式跟前一个的功能完全一样。Dim re, sSet re = New RegExpre.Pattern = 2-9s = Spain received 3 millimeters of rain last week.MsgBox re.Replace(s, many)替换数字和非数字经常需要替换数字。实际上,由
12、于经常要用到模式0-9(包括所有数字),所以有一种0-9的等价快捷方式:/d。Dim re, sSet re = New RegExpre.Pattern = /ds = a b c d e f 1 g 2 h . 10 zMsgBox re.Replace(s, a number)替换后的字符串如图 9-12所示。图 9-12如果要匹配非数字的字符怎么办?在方括号中使用符号。在方括号外使用的意义就完全不同了,稍后会对此做讨论。这样就可以使用下面的模式匹配非数字的字符:re.Pattern = ,0-9 the hard wayre.Pattern = /d a little shorterr
13、e.Pattern = /D another of those special characters最后一个模式使用了另一种特殊字符。在大部分情况下这种特殊字符只是减少了您的输入次数(或是一种有效的记忆方法),但在有些情况下,比如遇到匹配制表符和其他不能打印的字符时,这就很有用了。锚定和缩短模式有三种特殊字符用于锚定模式。它们本身不匹配任何字符,但是可以要求另一个模式必须出现在输入的开头(在外使用)、输入的结尾($)或是单词边界(您已经见过的/b)。另一种缩短模式的方法是使用重复数。基本的思路就是在模式后面指定重复的次数。例如,下面这个模式,如图 9-13所示,可以匹配多个数字并替换它们。Di
14、m re, sSet re = New RegExpre.Pattern = /d3s = Spain received 100 millimeters of rain in the last 2 weeks.MsgBox re.Replace(s, a whopping number of)图 9-13如果不在代码中使用重复数,如图 9-14所示,它会留下最后字符串中的00。图 9-14Dim re, sSet re = New RegExpre.Pattern = /ds = Spain received 100 millimeters of rain in the last 2 week
15、s./MsgBox re.Replace(s, a whopping number of)还要注意,这里不能使用 re.Global = True,因为这样会在结果中产生 4个“a whopping number of”。结果如图 9-15所示。图 9-15Dim re, sSet re = New RegExpre.Global = Truere.Pattern = /ds = Spain received 100 millimeters of rain in the last 2 weeks.MsgBox re.Replace(s, a whopping number of)指定匹配的范围或最小次数前面的表中已经罗列了,还可以指定匹配的最小次数min或范围min, max,。其中一些常用的重复模式也有专门的快捷方式。re.Pattern = /d+ one or more digits, /d1, re.Pattern = /d* zero or more digits, /d0, re.Pattern = /d? optional: zero or one, /d0,1Dim re, sSet re = New RegEx