VBScript正则表达式.docx

上传人:b****0 文档编号:18166565 上传时间:2023-08-13 格式:DOCX 页数:20 大小:25.86KB
下载 相关 举报
VBScript正则表达式.docx_第1页
第1页 / 共20页
VBScript正则表达式.docx_第2页
第2页 / 共20页
VBScript正则表达式.docx_第3页
第3页 / 共20页
VBScript正则表达式.docx_第4页
第4页 / 共20页
VBScript正则表达式.docx_第5页
第5页 / 共20页
VBScript正则表达式.docx_第6页
第6页 / 共20页
VBScript正则表达式.docx_第7页
第7页 / 共20页
VBScript正则表达式.docx_第8页
第8页 / 共20页
VBScript正则表达式.docx_第9页
第9页 / 共20页
VBScript正则表达式.docx_第10页
第10页 / 共20页
VBScript正则表达式.docx_第11页
第11页 / 共20页
VBScript正则表达式.docx_第12页
第12页 / 共20页
VBScript正则表达式.docx_第13页
第13页 / 共20页
VBScript正则表达式.docx_第14页
第14页 / 共20页
VBScript正则表达式.docx_第15页
第15页 / 共20页
VBScript正则表达式.docx_第16页
第16页 / 共20页
VBScript正则表达式.docx_第17页
第17页 / 共20页
VBScript正则表达式.docx_第18页
第18页 / 共20页
VBScript正则表达式.docx_第19页
第19页 / 共20页
VBScript正则表达式.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

VBScript正则表达式.docx

《VBScript正则表达式.docx》由会员分享,可在线阅读,更多相关《VBScript正则表达式.docx(20页珍藏版)》请在冰点文库上搜索。

VBScript正则表达式.docx

VBScript正则表达式

正则表达式(RegExp)对象

提供简单的正则表达式支持功能。

说明

下面的代码说明了RegExp对象的用法:

FunctionRegExpTest(patrn,strng)

DimregEx,Match,Matches      '成立变量。

SetregEx=NewRegExp         '成立正则表达式。

=patrn         '设置模式。

=True         '设置是不是区分字符大小写。

=True         '设置全局可用性。

SetMatches=(strng)   '执行搜索。

ForEachMatchinMatches      '遍历匹配集合。

RetStr=RetStr&"Matchfoundatposition"

RetStr=RetStr&&".MatchValueis'"

RetStr=RetStr&&"'."&vbCRLF

Next

RegExpTest=RetStr

EndFunction

MsgBox(RegExpTest("is.","IS1is2IS3is4"))

利用正则表达式

在典型的搜索和替换操作中,必需提供要查找的确切文字。

这种技术对于静态文本中的简单搜索和替换任务可能足够了,可是由于它缺乏灵活性,因此在搜索动态文本时就有困难了,乃至是不可能的。

利用正则表达式,就可以够:

测试字符串的某个模式。

例如,能够对一个输入字符串进行测试,看在该字符串是不是存在一个电话号码模式或一个信用卡号码模式。

这称为数据有效性验证。

替换文本。

能够在文档中利用一个正则表达式来标识特定文字,然后能够全数将其删除,或替换为别的文字。

按照模式匹配从字符串中提取一个子字符串。

能够用来在文本或输入字段中查找特定文字。

例如,若是需要搜索整个web站点来删除某些过时的材料并替换某些HTML格式化标记,则能够利用正则表达式对每一个文件进行测试,看在该文件中是不是存在所要查找的材料或HTML格式化标记。

用那个方式,就可以够将受影响的文件范围缩小到包括要删除或更改的材料的那些文件。

然后能够利用正则表达式来删除过时的材料,最后,能够再次利用正则表达式来查找并替换那些需要替换的标记。

另一个说明正则表达式超级有效的示例是一种其字符串处置能力还不为人所知的语言。

VBScript是VisualBasic的一个子集,具有丰硕的字符串处置功能。

与C类似的VisualBasicScriptingEdition则没有这一能力。

正则表达式给VisualBasicScriptingEdition的字符串处置能力带来了明显改善。

不过,可能仍是在VBScript中利用正则表达式的效率更高,它允许在单个表达式中执行多个字符串操作。

正则表达式语法

一个正则表达式就是由普通字符(例如字符a到z)和特殊字符(称为元字符)组成的文字模式。

该模式描述在查找文字主体时待匹配的一个或多个字符串。

正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

这里有一些可能会碰到的正则表达式示例:

VisualBasicScriptingEdition

VBScript

匹配

/^\[\t]*$/

"^\[\t]*$"

匹配一个空白行。

/\d{2}-\d{5}/

"\d{2}-\d{5}"

验证一个ID号码是否由一个2位数字,一个连字符以及一个5位数字组成。

/<(.*)>.*<\/\1>/

"<(.*)>.*<\/\1>"

匹配一个HTML标记。

下表是元字符及其在正则表达式上下文中的行为的一个完整列表:

字符

描述

\

将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。

例如,'n'匹配字符"n"。

'\n'匹配一个换行符。

序列'\\'匹配"\"而"\("则匹配"("。

^

匹配输入字符串的开始位置。

如果设置了RegExp对象的Multiline属性,^也匹配'\n'或'\r'之后的位置。

$

匹配输入字符串的结束位置。

如果设置了RegExp对象的Multiline属性,$也匹配'\n'或'\r'之前的位置。

*

匹配前面的子表达式零次或多次。

例如,zo*能匹配"z"以及"zoo"。

*等价于{0,}。

+

匹配前面的子表达式一次或多次。

例如,'zo+'能匹配"zo"以及"zoo",但不能匹配"z"。

+等价于{1,}。

?

匹配前面的子表达式零次或一次。

例如,"do(es)?

"可以匹配"do"或"does"中的"do"。

?

等价于{0,1}。

{n}

n是一个非负整数。

匹配确定的n次。

例如,'o{2}'不能匹配"Bob"中的'o',但是能匹配"food"中的两个o。

{n,}

n是一个非负整数。

至少匹配n次。

例如,'o{2,}'不能匹配"Bob"中的'o',但能匹配"foooood"中的所有o。

'o{1,}'等价于'o+'。

'o{0,}'则等价于'o*'。

{n,m}

m和n均为非负整数,其中n<=m。

最少匹配n次且最多匹配m次。

刘,"o{1,3}"将匹配"fooooood"中的前三个o。

'o{0,1}'等价于'o?

'。

请注意在逗号和两个数之间不能有空格。

?

当该字符紧跟在任何一个其他限制符(*,+,?

{n},{n,},{n,m})后面时,匹配模式是非贪婪的。

非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。

例如,对于字符串"oooo",'o+?

'将匹配单个"o",而'o+'将匹配所有'o'。

.

匹配除"\n"之外的任何单个字符。

要匹配包括'\n'在内的任何字符,请使用象'[.\n]'的模式。

(pattern)

匹配pattern并获取这一匹配。

所获取的匹配可以从产生的Matches集合得到,在VBScript中使用SubMatches集合,在VisualBasicScriptingEdition中则使用$0…$9属性。

要匹配圆括号字符,请使用'\('或'\)'。

(?

:

pattern)

匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。

这在使用"或"字符(|)来组合一个模式的各个部分是很有用。

例如,'industr(?

:

y|ies)就是一个比'industry|industries'更简略的表达式。

(?

=pattern)

正向预查,在任何匹配pattern的字符串开始处匹配查找字符串。

这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。

例如,'Windows(?

=95|98|NT|2000)'能匹配"Windows2000"中的"Windows",但不能匹配"Windows"中的"Windows"。

预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

(?

!

pattern)

负向预查,在任何不匹配Negativelookaheadmatchesthesearchstringatanypointwhereastringnotmatchingpattern的字符串开始处匹配查找字符串。

这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。

例如'Windows(?

!

95|98|NT|2000)'能匹配"Windows"中的"Windows",但不能匹配"Windows2000"中的"Windows"。

预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始

x|y

匹配x或y。

例如,'z|food'能匹配"z"或"food"。

'(z|f)ood'则匹配"zood"或"food"。

[xyz]

字符集合。

匹配所包含的任意一个字符。

例如,'[abc]'可以匹配"plain"中的'a'。

[^xyz]

负值字符集合。

匹配未包含的任意字符。

例如,'[^abc]'可以匹配"plain"中的'p'。

[a-z]

字符范围。

匹配指定范围内的任意字符。

例如,'[a-z]'可以匹配'a'到'z'范围内的任意小写字母字符。

[^a-z]

负值字符范围。

匹配任何不在指定范围内的任意字符。

例如,'[^a-z]'可以匹配任何不在'a'到'z'范围内的任意字符。

\b

匹配一个单词边界,也就是指单词和空格间的位置。

例如,'er\b'可以匹配"never"中的'er',但不能匹配"verb"中的'er'。

\B

匹配非单词边界。

'er\B'能匹配"verb"中的'er',但不能匹配"never"中的'er'。

\cx

匹配由x指明的控制字符。

例如,\cM匹配一个Control-M或回车符。

x的值必须为A-Z或a-z之一。

否则,将c视为一个原义的'c'字符。

\d

匹配一个数字字符。

等价于[0-9]。

\D

匹配一个非数字字符。

等价于[^0-9]。

\f

匹配一个换页符。

等价于\x0c和\cL。

\n

匹配一个换行符。

等价于\x0a和\cJ。

\r

匹配一个回车符。

等价于\x0d和\cM。

\s

匹配任何空白字符,包括空格、制表符、换页符等等。

等价于[ \f\n\r\t\v]。

\S

匹配任何非空白字符。

等价于[^ \f\n\r\t\v]。

\t

匹配一个制表符。

等价于\x09和\cI。

\v

匹配一个垂直制表符。

等价于\x0b和\cK。

\w

匹配包括下划线的任何单词字符。

等价于'[A-Za-z0-9_]'。

\W

匹配任何非单词字符。

等价于'[^A-Za-z0-9_]'。

\xn

匹配n,其中n为十六进制转义值。

十六进制转义值必须为确定的两个数字长。

例如,'\x41'匹配"A"。

'\x041'则等价于'\x04'&"1"。

正则表达式中可以使用ASCII编码。

.

\num

匹配num,其中num是一个正整数。

对所获取的匹配的引用。

例如,'(.)\1'匹配两个连续的相同字符。

\n

标识一个八进制转义值或一个后向引用。

如果\n之前至少n个获取的子表达式,则n为后向引用。

否则,如果n为八进制数字(0-7),则n为一个八进制转义值。

\nm

标识一个八进制转义值或一个后向引用。

如果\nm之前至少有isprecededbyatleastnm个获取得子表达式,则nm为后向引用。

如果\nm之前至少有n个获取,则n为一个后跟文字m的后向引用。

如果前面的条件都不满足,若 n和m均为八进制数字(0-7),则\nm将匹配八进制转义值nm。

\nml

如果n为八进制数字(0-3),且m和l均为八进制数字(0-7),则匹配八进制转义值nml。

\un

匹配n,其中n是一个用四个十六进制数字表示的Unicode字符。

例如,\u00A9匹配版权符号(?

)。

成立正则表达式

构造正则表达式的方式和创建数学表达式的方式一样。

也就是用多种元字符与操作符将小的表达式结合在一路来创建更大的表达式。

能够通过在一对分隔符之间放入表达式模式的各类组件来构造一个正则表达式。

对VisualBasicScriptingEdition而言,分隔符为一对正斜杠(/)字符。

例如:

/expression/

对VBScript而言,则采用一对引号("")来肯定正则表达式的边界。

例如:

"expression"

在上面所示的两个示例中,正则表达式模式(expression)均存储在RegExp对象的Pattern属性中。

正则表达式的组件能够是单个的字符、字符集合、字符范围、字符间的选择或所有这些组件的任意组合。

优先权顺序

在构造正则表达式以后,就可以够象数学表达式一样来求值,也就是说,能够从左至右并依照一个优先权顺序来求值。

下表从最高优先级到最低优先级列出各类正则表达式操作符的优先权顺序:

操作符

描述

\

转义符

(),(?

:

),(?

=),[]

圆括号和方括号

*,+,?

{n},{n,},{n,m}

限定符

^,$,\anymetacharacter

位置和顺序

|

“或”操作

普通字符

普通字符由所有那些未显式指定为元字符的打印和非打印字符组成。

这包括所有的大写和小写字母字符,所有数字,所有标点符号和一些符号。

最简单的正则表达式是一个单独的普通字符,能够匹配所搜索字符串中的该字符本身。

例如,单字符模式'A'能够匹配所搜索字符串中任何位置出现的字母'A'。

这里有一些单字符正则表达式模式的示例:

/a/

/7/

/M/

等价的VBScript单字符正则表达式为:

"a"

"7"

"M"

能够将多个单字符组合在一路取得一个较大的表达式。

例如,下面的VisualBasicScriptingEdition正则表达式不是别的,就是通过组合单字符表达式'a'、'7'和'M'所创建出来的一个表达式。

/a7M/

等价的VBScript表达式为:

"a7M"

请注意这里没有连接操作符。

所需要做的就是将一个字符放在了另一个字符后面。

特殊字符

有很多元字符在试图对其进行匹配时需要进行特殊的处置。

要匹配这些特殊字符,必需第一将这些字符转义,也就是在前面利用一个反斜杠(\)。

下表给出了这些特殊字符及其含义:

特殊字符

说明

$

匹配输入字符串的结尾位置。

如果设置了RegExp对象的Multiline属性,则$也匹配'\n'或'\r'。

要匹配$字符本身,请使用\$。

()

标记一个子表达式的开始和结束位置。

子表达式可以获取供以后使用。

要匹配这些字符,请使用\(和\)。

*

匹配前面的子表达式零次或多次。

要匹配*字符,请使用\*。

+

匹配前面的子表达式一次或多次。

要匹配+字符,请使用\+。

.

匹配除换行符\n之外的任何单字符。

要匹配.,请使用\。

[

标记一个中括号表达式的开始。

要匹配[,请使用\[。

?

匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。

要匹配?

字符,请使用\?

\

将下一个字符标记为或特殊字符、或原义字符、或后向引用、或八进制转义符。

例如,'n'匹配字符'n'。

'\n'匹配换行符。

序列'\\'匹配"\",而'\('则匹配"("。

^

匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。

要匹配^字符本身,请使用\^。

{

标记限定符表达式的开始。

要匹配{,请使用\{。

|

指明两项之间的一个选择。

要匹配|,请使用\|。

非打印字符

有很多很有效的非打印字符,偶尔必需利用。

下表显示了用来表示这些非打印字符的转义序列:

字符

含义

\cx

匹配由x指明的控制字符。

例如,\cM匹配一个Control-M或回车符。

x的值必须为A-Z或a-z之一。

否则,将c视为一个原义的'c'字符。

\f

匹配一个换页符。

等价于\x0c和\cL。

\n

匹配一个换行符。

等价于\x0a和\cJ。

\r

匹配一个回车符。

等价于\x0d和\cM。

\s

匹配任何空白字符,包括空格、制表符、换页符等等。

等价于[ \f\n\r\t\v]。

\S

匹配任何非空白字符。

等价于[^ \f\n\r\t\v]。

\t

匹配一个制表符。

等价于\x09和\cI。

\v

匹配一个垂直制表符。

等价于\x0b和\cK。

限定符

有时候不明白要匹配多少字符。

为了能适应这种不肯定性,正则表达式支持限定符的概念。

这些限定符能够指定正则表达式的一个给定组件必需要出现多少次才能知足匹配。

下表给出了各类限定符及其含义的说明:

字符

描述

*

匹配前面的子表达式零次或多次。

例如,zo*能匹配"z"以及"zoo"。

*等价于{0,}。

+

匹配前面的子表达式一次或多次。

例如,'zo+'能匹配"zo"以及"zoo",但不能匹配"z"。

+等价于{1,}。

?

匹配前面的子表达式零次或一次。

例如,"do(es)?

"可以匹配"do"或"does"中的"do"。

?

等价于{0,1}。

{n}

n是一个非负整数。

匹配确定的n次。

例如,'o{2}'不能匹配"Bob"中的'o',但是能匹配"food"中的两个o。

{n,}

n是一个非负整数。

至少匹配n次。

例如,'o{2,}'不能匹配"Bob"中的'o',但能匹配"foooood"中的所有o。

'o{1,}'等价于'o+'。

'o{0,}'则等价于'o*'。

{n,m}

m和n均为非负整数,其中n<=m。

最少匹配n次且最多匹配m次。

刘,"o{1,3}"将匹配"fooooood"中的前三个o。

'o{0,1}'等价于'o?

'。

请注意在逗号和两个数之间不能有空格。

对一个专门大的输入文档而言,章节数很轻易就超过九章,因此需要有一种方式来处置两位数或三位数的章节号。

限定符就提供了那个功能。

下面的VisualBasicScriptingEdition正则表达式能够匹配具有任何位数的章节题目:

/Chapter[1-9][0-9]*/

下面的VBScript正则表达式执行一样的匹配:

"Chapter[1-9][0-9]*"

请注意限定符出此刻范围表达式以后。

因此,它将应用于所包括的整个范围表达式,在本例中,只指定了从0到9的数字。

这里没有利用'+'限定符,因为第二位或后续位置上并非必然需要一个数字。

一样也没有利用'?

'字符,因为这将把章节数限制为只有两位数字。

在'Chapter'和空格字符以后至少要匹配一个数字。

若是已知章节数限制只有99章,则能够利用下面的VisualBasicScriptingEdition表达式来指定至少有一名数字,但不超过两个数字。

/Chapter[0-9]{1,2}/

对VBScript能够利用下述正则表达式:

"Chapter[0-9]{1,2}"

上述表达式的缺点是若是有一个章节号大于99,它仍只会匹配前两位数字。

另一个缺点是某些人能够创建一个Chapter0,而且仍能匹配。

一个更好的用来匹配两位数的VisualBasicScriptingEdition表达式如下:

/Chapter[1-9][0-9]?

/

/Chapter[1-9][0-9]{0,1}/

对VBScript而言,下述表达式与上面等价:

"Chapter[1-9][0-9]?

"

"Chapter[1-9][0-9]{0,1}"

'*'、'+'和'?

'限定符都称之为贪婪的,也就是说,他们尽可能多地匹配文字。

有时这根本就不是所希望发生的情形。

有时则正好希望最小匹配。

例如,你可能要搜索一个HTML文档来查找一处包括在H1标记中的章节题目。

在文档中该文字可能具有如下形式:

Chapter1–IntroductiontoRegularExpressions

下面的表达式匹配从开始的小于号(<)到H1标记结束处的大于号之间的所有内容。

/<.*>/

 VBScript的正则表达式为:

"<.*>"

若是所要匹配的就是开始的H1标记,则下述非贪婪地表达式就只匹配

/<.*?

>/

"<.*?

>"

通过在'*'、'+'或'?

'限定符后放置'?

',该表达式就从贪婪匹配转为了非贪婪或最小匹配。

定位符

到此刻为止,所看到的示例都只考虑查找任何地方出现的章节题目。

出现的任何一个字符串'Chapter'后跟一个空格和一个数字可能是一个真正的章节题目,也可能是对其他章节的交叉引用。

由于真正的章节题目老是出此刻一行的开始,因此需要设计一个方式只查找题目而不查找交叉引用。

定位符提供了那个功能。

定位符能够将一个正则表达式固定在一行的开始或结束。

也能够创建只在单词内或只在单词的开始或结尾处出现的正则表达式。

下表包括了正则表达式及其含义的列表:

字符

描述

^

匹配输入字符串的开始位置。

如果设置了RegExp对象的Multiline属性,^也匹配'\n'或'\r'之后的位置。

$

匹配输入字符串的结束位置。

如果设置了RegExp对象的Multiline属性,$也匹配'\n'或'\r'之前的位置。

\b

匹配一个单词边界,也就是指单词和空格间的位置。

\B

匹配非单词边界。

不能对定位符利用限定符。

因为在一个换行符或单词边界的前面或后面不会有持续多个位置,因此诸如'^*'的表达式是不允许的。

要匹配一行文字开始位置的文字,请在正则表达式的开始处利用'^'字符。

不要把'^'的那个语法与其在括号表达式中的语法弄混。

它们的语法根本不同。

要匹配一行文字结束位置的文字,请在正则表达式的结束处利用'$'字符。

要在查找章节题目时利用定位符,下面的VisualBasicScriptingEdition正则表达式将匹配位于一行的开始处最多有两个数字的章节题目:

/^Chapter[1-9][0-9]{0,1}/

VBScript中相同功能的正则表达式如下:

"^Chapter[1-9][0-9]{0,1}"

一个真正的章节题目不仅出此刻一行的开始,而且这一行中也仅有这一个内容,因此,它必然也位于一行的结束。

下面的表达式确保所指定的匹配只匹配章节而不会匹配交叉引用。

它是通过创建一个只匹配一行文字的开始和结束位置的正则表达式来实现的。

/^Chapter[1-9][0-9]{0,1}$/

对VBScript则利用:

"^Chapter[1-9][0-9]{0,1}$"

匹配单词边界有少量不同,但却给正则表达式增加了一个超级重要的功能。

单词边界就是单词和空格之间的位置。

非单词边界就是其他任何位置。

下面的VisualBasicScriptingEdition表达式将匹配单词'Chapter'的前三个字符,因为它们出此刻单词边界后:

/\bCha/

对VBScript为:

"\bCha"

这里'\b'操作符的位置很关键。

若是它位于要匹配的字符串的开始,则将查找位于单词开头处的匹配;若是它位于改字符串的末尾,则查找位于单词结束处的匹配。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2