|
本帖最后由 wang-way 于 2021-2-8 19:05 编辑
最近在学习、实践正则表达式,萌生了一个想法,怎么从声明部分提取变量名称呢?请教一下高手们,怎么写正则表达式从测试代码中提取变量。是能直接提取呢?还是迂回替换掉不需要的部分?我已经在正则表达式的迷宫里迷路了~~~~
Sub test()
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#
End Sub
观察了部分特征,却不会写表达式。。。。
特征1:变量名简单考虑为非空白\S
特征2:Dim之后 是不是用(?:Dim)来,确定声明所在的行
特征3:变量前面均有空白\s
特征4:变量后面可能是英文逗号(,),或者本行结尾$,又或者是\sAs\s(New)??\S+
- Public Sub Basic_CodeFrame2()
- Set reg = CreateObject("VBScript.RegExp")
- reg.Global = True
- reg.MultiLine = True
- 'dim之后,前导空白,后面可能是逗号,可以是结尾,可能是空白+as
- reg.Pattern = "(?:Dim)(\s\S+[,$]|\s\S+\sAs\s(New\s)??\S+)+"
- Set ms = reg.Execute([b1].Value)
- n = 0
- For Each m In ms
- n = n + 1
- Debug.Print n, ">>>>", m.Value ', m.FirstIndex, m.Length
- Next
-
- End Sub
复制代码
|
|