gpt4 book ai didi

regex - 用于属性、函数和子项的 VBA 正则表达式

转载 作者:行者123 更新时间:2023-12-01 12:28:34 26 4
gpt4 key购买 nike

我需要扫描 Application.VBE.ActiveProject.VBComponent.CodeModule 以查找定义属性、函数和子项的所有行。我想检索范围、类型、名称和返回变量类型(如果可用)。

匹配线例如

  • Private Property Get Attribute() As String
  • 公共(public)子 calculateTotal()
  • Friend Function getIdentifier() As Long

我迭代开发了一个应该匹配的正则表达式

  • 关键字 PublicFriendPrivate
  • 后跟一个空格
  • 后跟关键字 PropertySubFunction
  • 后跟一个空格
  • 后跟可选关键字 GetSet(如果它是属性)
  • 后跟名称(由任意文字和下划线组成)
  • 后面是括号,里面可以包含参数
  • 后跟可选关键字 As
  • 后面是可选的变量类型

最后是

  • (Public|Friend|Private)(已捕获)
  • (?: )
  • (属性|子|函数)(捕获)
  • (?: )
  • (?:[Get |Set ]*)(我猜这里开始变得丑陋了)
  • (\w+)(捕获)
  • (?:\([\w\s]+\))
  • (?:[As ]*)
  • (\w*)(捕获)

或在“单词”(Public|Friend|Private)(?: )(Property|Sub|Function)(?: )(?:[Get |Set ]*)(\w+)(? :\([\w\s]+\))(\w*)。我尝试使用 Expresso 构建和调试正则表达式但无法让它工作。我显然缺乏安全地包含所需部分和排除表达式的可选部分的知识。

最佳答案

你可以使用

(Public|Friend|Private)\s+(Property|Sub|Function)(\s+[GS]et)?\s+(\w+)\s*(\([^()]*\))(\s+As\s+\w+)?

参见 this regex demo

解释:

(Public|Friend|Private)  # keyword
\s+ # blank
(Property|Sub|Function) # keyword2
(\s+[GS]et)? # Optional blank + Get/Set
\s+(\w+) # blank + name
\s*(\([^()]*\)) # Optional blank+compulsory parentheses
(\s+As\s+\w+)? # Optional As +variable type

要点是要使序列 成为可选的,您需要在其后应用分组? 量词。比如说,要有选择地匹配 blank + As 你需要 \s+ (1 个或多个空格)和 As 包裹在 ()?:(\s+As)?。您的 [Get |Set ]* 匹配零个或多个 Get、空格、 |S 个字符作为 [...] 是一个字符类,匹配集合/范围中的单个字符( s).

注意 \([^()]*\) 匹配像 (no-round-brackets-inside) 这样的字符串,因为 [^() ] 是一个否定字符类,匹配除 () 之外的任何字符。

关于regex - 用于属性、函数和子项的 VBA 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36948180/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com