我正在尝试使用 VBScript 构造一个正则表达式来提取未注释掉的 VBScript 方法声明。例如,考虑以下方法:
Public Function thisContainsACommentedRoutine()
'' Public Sub myRoutine1()
'' print "hello"
'' End Sub
thisContainsACommentedRoutine = 1 + 1
End Function
'Public Sub myRoutine2()
' print "routine2"
'End Sub
Private Sub sub1()
print "sub1"
End Sub
我希望提取以下方法声明:
Public Function thisContainsACommentedRoutine()
Private Sub sub1()
我尝试使用以下正则表达式(以及其他许多正则表达式;我尝试使用否定的后视进行研究,但 VBScript 不支持它们,因此我也尝试了否定的前瞻):
(?!')(Public|Private) (Function|Sub) .*
使用http://regexpal.com,但正在提取所有方法声明,我想忽略在方法声明之前包含注释字符的任何行。
上面第一个代码块中的代码作为整个字符串返回给我,我正在使用 VBScript 的正则表达式对象在整个方法字符串上执行模式。另外,我想避免一次处理一行以节省时间。
我尝试查找类似的问题(Regular Expression Negative Lookbehind Alternative for VBScript),但不知何故,我正在使用的负前瞻正则表达式仍在获取被注释掉的方法。
有什么建议么?
编辑:我改用.NET 的正则表达式对象,它支持否定的后向断言。我现在使用以下正则表达式:
\s*?(?<!')\s*?(Public|Private) (Function|Sub) .*
但是,我仍然得到不正确的匹配:
Public Function thisContainsACommentedRoutine()
Public Sub myRoutine1()
Private Sub sub1()
匹配“Public Sub myRoutine1()”不应该出现;不管方法前有多少个空格,如果方法声明前至少有一个注释字符(行中的任何位置),我不希望方法匹配。