日期:2021年04月27日
作者:Commas
注释:VB6本身不支持正则,需要引入VBS中的正则来工作……
文章目录
一、正则的前期绑定与后期绑定
1)正则的前期绑定(静态绑定)
引入流程:
工程→引用→Microsoft VBScript Regular Expressions 5.5
'NO1:先声明,后实例化
Dim re As RegExp
Set pDicX = New RegExp
'NO2:直接声明实例化,相当于执行了NO1的两句代码
Dim re As New RegExp
2)正则的前期绑定(动态绑定)
Dim re As Object
Set re = CreateObject("vbscript.regexp")
二、属性与方法
1)RegExp
RegExp
:正则表达式匹配模式的主要对象
查看流程:视图→对象浏览器→VBScript_RegExp_55→RegExp
属性与方法 | 类型 | 说明 |
---|---|---|
Global | Boolean | True表示匹配所有, False表示仅匹配第一个符合项 |
IgnoreCase | Boolean | True表示不区分大小写, False表示区分大小写 |
Multiline | Boolean | True表示允许多匹配多行文本, False表示搜索在换行时停止 |
Pattern | String | 正则表达式 |
Execute | Object | 执行正则查找,返回所有匹配结果的集合,若未找到,则为空 |
Replace | String | 执行正则字符串替换,并返回替换后的字符串 |
Test | Boolean | 执行正则查找,若找到返回True,否则返回False |
2)MatchCollection
MatchCollection
:集合对象,包含有关匹配字符串的信息,该对象包含每个成功匹配的Match对象
查看流程:视图→对象浏览器→VBScript_RegExp_55→MatchCollection
属性与方法 | 类型 | 说明 |
---|---|---|
Count | Long | 匹配对象的总数 |
Item | Object | 匹配对象的索引 |
3)Match
Match
:成功匹配的对象
查看流程:视图→对象浏览器→VBScript_RegExp_55→Match
属性与方法 | 类型 | 说明 |
---|---|---|
FirstIndex | Long | 匹配对象所匹配字符串的起始位置 |
Length | Long | 匹配对象所匹配字符串的字符长度 |
SubMatches | Object | 匹配对象所匹配结果的子项 |
Value | String | 匹配对象所匹配的值 |
4)SubMatches
SubMatches
:成功匹配的对象的子项
查看流程:视图→对象浏览器→VBScript_RegExp_55→SubMatches
属性与方法 | 类型 | 说明 |
---|---|---|
Count | Long | 匹配对象所匹配结果子项的总数 |
Item | String | 匹配对象所匹配结果子项的结果 |
三、正则使用的示例
1)代码:
Option Explicit
Private Sub Form_Load()
On Error Resume Next
Dim sTxt As String: sTxt = "123 regexp 985abc@qq.com 正则表达式"
'NO1
Dim re As New RegExp
'NO2
'Dim re As Object
'Set re = CreateObject("vbscript.regexp")
With re
.Global = False
.IgnoreCase = False
.MultiLine = True
.Pattern = "(\w+)@(qq)\.com"
'1)判断字符串中是否存在正则匹配的字符串
Debug.Print sTxt, .Test(sTxt)
'2)替换字符串中存在正则匹配的字符串
Debug.Print .Replace(sTxt, "邮箱")
'3)查找字符串中存在正则匹配的字符串,并返回匹配集合Match
Dim clnM As MatchCollection, oM As Match, i As Long, j As Long
Set clnM = .Execute(sTxt)
With clnM
Debug.Print "clnM.Count=" & .Count
For i = 0 To .Count - 1
Set oM = .Item(i)
Debug.Print i, oM, "→明细:", oM.FirstIndex, oM.Length, oM.Value
If oM.SubMatches.Count > 0 Then
Debug.Print "oM.SubMatches.Count=" & oM.SubMatches.Count
For j = 0 To oM.SubMatches.Count - 1
Debug.Print "oM.SubMatches(" & j & ")=" & oM.SubMatches(j)
Next j
End If
Next i
End With
End With
End Sub
2)结果:
123 regexp 985abc@qq.com 正则表达式 True
123 regexp 邮箱 正则表达式
clnM.Count=1
0 985abc@qq.com →明细: 11 13 985abc@qq.com
oM.SubMatches.Count=2
oM.SubMatches(0)=985abc
oM.SubMatches(1)=qq
版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/116745321