实例需求:待处理代码段如下所示,现在需要提取其中的变量名称。
Public pFactor As Integer
Sub TestCode()
Dim reg As New RegExp, a As Workbook
Dim ms As VBScript_RegExp_55.MatchCollection
Dim m As VBScript_RegExp_55.Match
Dim i, j
Dim x1, y1, z1 As String
Dim x2 As String, y2, z2
Dim x3, y3 As String, z3
Dim x4 As String, y4 As String, z4
Dim i2$, j2&, k2#
Const PRE_RATE = 2.5
End Sub
示例代码如下。
Sub Demo()
Dim sText, objRegexp, objMH, objMHs, objMHVars, objMHVar
sText = Trim([a1])
Set objRegexp = CreateObject("vbscript.regexp")
objRegexp.IgnoreCase = True
objRegexp.Global = True
objRegexp.Pattern = "\b(?:Public|Private|Static|Const|Dim)\b(.+)"
Set objMHs = objRegexp.Execute(sText)
objRegexp.Pattern = "(\w+)[^,]*"
For Each objMH In objMHs
Set objMHVars = objRegexp.Execute(objMH.submatches(0))
For Each objMHVar In objMHVars
Debug.Print objMHVar.submatches(0)
Next
Next
Set objMH = Nothing
Set objMHs = Nothing
Set objMHVars = Nothing
Set objMHVar = Nothing
Set objRegexp = Nothing
End Sub
【代码解析】
第3行代码读取待处理文本。
第4行代码创建正则对象。
第5行代码设置正则匹配忽略字符大小写。
第6行代码设置正则全局匹配。
第5行代码设置正则匹配模式。
正则表达式 | 说明 |
---|---|
`\b(?:Public | Private |
(.+) | 匹配至少一个任意字符,第一个匹配组 |
匹配结果如下图所示。
第8第行代码执行正则匹配。
第9行代码设置第2此正则匹配模式。
正则表达式 | 说明 |
---|---|
(\w+) | 匹配至少一个(数字、字母、下划线)字符,第一个匹配组 |
[^,]* | 匹配非逗号字符,可以不存在 |
匹配结果如下图所示。
第10~15行代码循环遍历匹配结果。
第11第行代码再次执行正则匹配。
第12~14行代码循环遍历第2次匹配结果,第13行代码输入匹配结果。