【问题标题】:VBScript Regex: Match everything except multi-line patternVBScript Regex:匹配除多行模式之外的所有内容
【发布时间】:2013-05-15 19:45:14
【问题描述】:

与我需要回答的问题(Regex / Vim: Matching everything except a pattern, where pattern is multi-line?)有一个非常相似的问题:我需要将以下 Vim 正则表达式转换为 VBScript 正则表达式:

:%s/\%(^end\n*\|\%^\)\zs\_.\{-}\ze\%(^begin\|\%$\)//

基本上,我需要做的是获取方法之前、之间和之后的所有文本(不包括方法中的代码)。我已经有一个 VBScript 正则表达式来抓取方法和它们体内的代码,如下所示:

((?:(?:Public|Private)) (?:Sub|Function).+)\n(.*\n)*?End (?:Sub|Function)

以下是全局代码和方法代码的示例文本:

'-----------------------------------------------------------------------------------------
'
'   the code:   Header
'
'-----------------------------------------------------------------------------------------

Dim GLOBAL_VARIABLE_1
Dim GLOBAL_VARIABLE_2

Public Function doThis(byVal xml)
'' Created               : dd/mm/yyyy
'' Return                : string
'' Param            : xml- an xml blob

     return = replace(xml, "><", ">" & vbLf & "<")

     GLOBAL_VARIABLE_1 = 2 + 2

     doThis= return

End Function


msgbox GLOBAL_VARIABLE_1



Public Function doThat(byVal xPath)
'' Created               : dd/mm/yyyy
'' Return                : array
' 'Param            : xPath

     return = split(mid(xPath, 2), "/")
     doThat = return

End Function


GLOBAL_VARIABLE_2 = 2 + 2


Public Function alsoDoThis(byRef obj)
'' Created               : dd/mm/yyyy
'' Return                : string
' 'Param            : obj, an xml document object

     For i = 0 To 4
          return = return & "hi" & " "

     Next

     alsoDoThis = trim(return)

End Function


GLOBAL_VARIABLE_3 = 2 + 2

如何取反或翻转我拥有的VBscript正则表达式,或转换我需要的Vim正则表达式,以便在方法级代码之前、中间或之后抓取所有全局级代码(不包括方法声明和“结束子/功能”部分)?

【问题讨论】:

    标签: regex vbscript multiline except


    【解决方案1】:

    删除所有过程和函数,剩下的就是你要找的。​​p>

    text = "..."
    
    Set re = New RegExp
    re.Pattern = "((public|private)\s+)?(function|sub)[\s\S]+?end\s+(function|sub)"
    re.Global  = True
    re.IgnoreCase = True
    
    rest = re.Replace(text, "")
    

    【讨论】:

    • 效果很好,谢谢!我使用了以下正则表达式,以便我也可以将函数名称作为子匹配(以防万一有人感兴趣):^((?:(?:Public|Private)\s+)?(?:Function|Sub).+)[\s\S]+?End\s+(?:Function|Sub)\r$
    猜你喜欢
    • 2012-03-06
    • 1970-01-01
    • 2019-10-14
    • 2014-01-30
    • 2021-05-26
    • 2022-08-21
    • 1970-01-01
    相关资源
    最近更新 更多