vbs脚本正则表达式简介

<1>Matches集合的Item和Count属性

 利用Matches集合的Item属性可以得到它包含的每个Match对象;利用Count属性可以得到成功匹配的个数.

Matches集合对象中元素(成功匹配)的索引编号从0开始.我们可以用遍历集合的方式或索引方法读取每一个匹配值.

 例:从一段文本中提取所有英文单词.

 目标文本:”苹果:iphone_5s;诺基亚:Nokia_1020”

结果要求:分别提取出iphone_5s和Nokia_1020

代码:

Sub test2()
    Dim reg, k, mh, strA
    strA = "苹果:iphone_5s;诺基亚:Nokia_1020"
    Set reg =CreateObject("vbscript.regexp")
    reg.Pattern = "\w+"
    reg.Global = True
    Set mh = reg.Execute(strA)
    For Each mhk In mh
        msgbox mhk.value
    Next
End Sub

讨论:

通过语句Set mh =
reg.Execute(strA),Execute方法返回一个集合对象mh,在这个集合对象里包含两个匹配对象,代码中用遍历方法取出每一个匹配对象的值.

Execute方法返回的集合对象mh,有两个属性:

1)Count:
Execute方法成功匹配的次数,也可理解为mh集合对象中包含的成功匹配对象的个数.语法:

N=mh.count 本例中n值为2

2)Item: 索引,可以通过索引值,返回集合对象中指定的匹配对象.语法:

  Set mhk=mh.item(0) 

  K=mhk.value

用索引返回第一个Match对象即mhk. 本例中k为第一个Match对象的值(iphone_5s).
同样的方法可以得到第二匹配的值.

由于Item和Value属性是集合的默认属性,所以上面两个语句也可简写为:

  K=mh(0)......第一个匹配对象的值(iphone_5s)

M=mh(1)…第二个匹配对象的值(Nokia_1020)

上面代码中遍历集合也可以用索引法遍历:

For i=0 to mh.count-1

Debug.print mh(i).value

Next i

<2>Match对象的属性

Execute方法返回的集合对象中包含的也是对象元素,即match对象,match对象有四个属性:

FirstIndex:匹配对象所匹配字符串的起始位置。

Length:匹配对象所匹配字符串的字符长度。

SubMatches:匹配对象所匹配结果中的子项集合。

Value:匹配对象所匹配的值。

在本例中:索引为0,即第一个匹配对象的属性值为:

K=mh(0).value
k的值为iphone_5s,value是默认属性可简写为k=mh(0)

sn=Mh(0).firsindex
sn的值为3,表示在目标字符串中,位置3上找到该匹配iphone_5s.(位置是从0开始的)

Ln=mh(0).length
ln值为9,即iphone_5s的字符长度

<3>Match对象的Submatches属性

匹配对象match的Submatches是一个集合属性,它包含正则表达式中用圆括号捕捉到的所有子匹配.它为用户提供了返回$1特殊变量值的方法.

集合Submatches有两个固有属性:Count和Item.可以通过Item得到集合中的每个值,它实际就是在正则表达式中用圆括号捕获的内容;Count值是集合中元素个数,实际上就是正则表达式中捕获性圆括号的个数.

下面给一个实例来说明:

 目标文本:给定一个标准邮箱地址:J3721@163.com

 要求:从邮箱中分别提取出:用户名j3721,服务器域名163.com

 正则表达式:  ^(\w+)@(.+)$

 代码:
  Sub test5()
       Dim reg, mh, strA$, username$, domname$
       strA = "J3721@163.com"
       Set reg =
       CreateObject("vbscript.regexp")
       reg.Pattern = "^(\w+)@(.+)$"
       Set mh = reg.Execute(strA)
       N=mh(0).submatches.count 
         ‘n值等于2
       username = mh(0).submatches(0)    ‘j3721
       domname = mh(0).submatches(1)    ‘163.com
  End Sub

讨论:
正则表达式中,\w+表示匹配@前面的所有英文单词字符;@后面的点号是一个元字符,表示匹配除换行符外的所有字符之一,后面紧跟+号,即”.+”表示匹配@后面除了换行符外的所有字符.用括号包围起来,用户名和域名就会自动分别保存在变量$1和$2中.
前面已经知道VBA不能在replace之外直接调用$1或$2,而这个例子告诉我们可以用match对象的submatches集合属性来提取.
在这个例子中,execute方法返回的集合对象mh中,mh中只有一个匹配对象Match,即mh(0);mh(0)对象的属性submatches(0),返回第一个括号中的内容,即j3721.而submatches(1),返回第二个括号中的内容.submathches集合也有count属性,所以如果有很多子项需要提取,也可用遍历或索引方法返回每一个特殊变量值.最后再给一例子:
下面的代码演示了如何从一个正则表达式获得一个 SubMatches 集合以及它的专有成员:

正则表达式(一个邮箱地址):

 (\w+)@(\w+)\.(\w+)

 如果你没有进一步了解元字符,可能不懂其中含义,不过没关系,在这里你只要知道,该代码的任务是显示电子邮箱dragon@xyzzy.com,用户名和组织名.

Function SubMatchTest(inpStr)

Dim oRe, oMatch, oMatches

Set oRe = New RegExp

' 查找一个电子邮件地址

oRe.Pattern =

“(\w+)@(\w+).(\w+)”

' 得到

Matches 集合

Set oMatches = oRe.Execute(inpStr)

' 得到

Matches 集合中的第一项

Set oMatch = oMatches(0)

' 创建结果字符串。

' Match 对象是完整匹配 — dragon@xyzzy.com

retStr = "电子邮件地址是:

" & oMatch & vbNewline

' 得到地址的子匹配部分。

retStr = retStr &

"电子邮件别名是: " & oMatch.SubMatches(0) ’ dragon

retStr = retStr & vbNewline

retStr = retStr &

"组织是: " & oMatch. SubMatches(1)
’ xyzzy

SubMatchTest = retStr

End Function

Sub SubMatchesTest()

 MsgBox(SubMatchTest("请写信到 dragon@xyzzy.com 。 谢谢!"))

End Sub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值