使用 RegEx 查找 VBA 注释

2023-12-06

我正在尝试使用正则表达式查找所有 VBA 注释。我有一些大部分有效的东西,但有一些例外我无法弄清楚。

我正在使用的表达:

'(?!.*").*

拿我们的测试代码来说:

Working - This is a test 'This should be captured
Working - "this is a test" 'This should be captured
Not Working - "this is a test" 'This should be "captured"
Not Working - This is a test 'This should be "captured"
Working - "this is a test 'this should not capture'" 'this should capture
Working - "this isn't a test" 'this should capture

以下是 RegExr 中此示例的链接:http://regexr.com/3f24h

由于某种原因,第三个和第四个示例没有捕获。问题似乎在于注释中包含字符串值,我不知道如何修复它。

有什么建议吗?


您无法使用正则表达式 - 句点在 VBA 代码中找到所有注释(更不用说字符串文字)。相信我,我在研究智能压头模块时尝试过橡皮鸭(如果这还不够明确 - 完全披露,我是贡献者)。您需要实际解析代码。您将遇到的第一个问题是行延续:

'Comment with a line _
continuation

Debug.Print 'End of line comment _
with line continuation.

Debug.Print 'Multiple line continuation operators _ _
still work.

Debug.Print 'This is actually *not* a line continuation_
Debug.Print 42

这使得识别字符串文字变得困难,特别是您正在使用逐行处理:

Debug.Print 42 'The next line... _
"...is not a string literal"

你还必须处理旧的Rem注释语法...

Rem old school comment

...也支持行延续:

Rem old school comment with line _
continuation.

您可能会想“这不会那么糟糕,雷姆必须开始排队”。如果是,那么您忘记了语句分隔符(:)...

Debug.Print 42: Rem statement separator comment.

...或者它的邪恶孪生语句分隔符与行延续相结合:

Debug.Print 42: Rem this can be _
continued too.

您通过整理字符串文字和注释解决了一些问题,如下所示......

Debug.Print "Unmatched double quotes." 'Comment"
Debug.Print "Interleaved single 'n double quotes." 'Comment"

...但是像这个野兽这样的括号标识符呢(由@ThunderFrame 提供)?

'No comments or strings in the line below.
Debug.Print [Evil:""Comment"'here] 

请注意,语法高亮SO使用甚至没有捕捉到所有这些奇怪的极端情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 RegEx 查找 VBA 注释 的相关文章

随机推荐

  • 如何通过 ingress 在 GKE 中启用 cors

    我尝试使用以下注释启用带有入口的 cors 但没有成功 kubernetes io ingress class nginx nginx ingress kubernetes io enable cors true 正确的注释是ingress
  • 是否有一棵树可以对对象进行排序?

    我编写了一个红黑二叉统计树 以获得与红黑树中其他对象可比较的任意对象的排名 我想知道是否有一个 API 类提供相同的功能 如果给定一个等级 该类有一个函数可以返回树中该等级的对象 那就太好了 请注意 红黑 BST 允许在 log n 时间内
  • 将 Unicode 代码点转换为 UTF-8 和 UTF-32

    我想不出一种方法来删除前导零 我的目标是for循环创建每个数字的 UTF 8 和 UTF 32 版本 例如 对于 UTF 8 我不需要删除前导零吗 有谁有解决方案来解决这个问题 基本上我要问的是 有人有一个简单的解决方案将 Unicode
  • 空 XML 分离出默认 XML

    我有一个传递给 XSL 的 XML 它提供了标准输出 根据某些情况 有时我可能会将 XML 设为空 如果我们有空 XML 并获取 XSL 中的标准或默认输出 有什么办法吗 如果我们有空 XML 有什么办法吗 并获取标准或默认值 放入 XSL
  • Java(Eclim + Vim)“system.out.print”不工作

    我是 Java 编程新手 今天在摆弄 eclim 和 vim 时 我发现 System out println 功能不起作用 class apples public static void main String args double t
  • 更改屏幕后反应本机保存按钮状态

    我的应用程序中有 5 个按钮 跑步 骑行 阅读 编码 牛儿 当我单击它时 按钮会更改其颜色并在屏幕上显示标题 我正在使用这个库 反应本机选择多个按钮 假设我单击了 跑步 和 骑行 按钮 这些按钮将突出显示 并且文本将显示在屏幕上 但是当我将
  • C#中如何通过socket发送文件

    我有服务器和客户端控制台应用程序 它们可以很好地通信并发送一些字符串 这是代码 Server public static void Main try IPAddress ipAd IPAddress Parse 127 0 0 1 Init
  • 使用自定义类加载器加载资源包

    import java io ByteArrayOutputStream import java io File import java io IOException import java io InputStream import ja
  • 启动 PyCharm 时 Dyld 错误消息

    几周来我一直在试图解决这个问题 但仍然陷入困境 我一直在研究它并慢慢获得更多信息 但还无法解决它 我在 Stack Overflow 上读过这些类似的问题 dyld 库未加载 usr local Cellar python 3 7 4 1
  • 如何访问多个文件的内容

    有什么方法可以添加多个文件的内容 然后将组合值放入一个文件中 我目前正在尝试这个 start tr include include all items item input start tr php img start include in
  • 如何从父 javascript 页面访问子 iframe 元素?

    在我的页面中 我有 iframe 代码 当我单击启用框架窗口的特定链接时 它是一个表单 当我提交表单时 我会得到一些隐藏字段值 我如何访问父页面中的这些值 由于您的 iframe src 完整的 url 而不是相对路径 即 app apps
  • 通过Javascript提交带有参数的表单

    下面是我的 Javascript 代码 其中 k 和 m 是 Javascript 变量 function javascriptfunction document forms formname action gotopage php par
  • Sublime Text 插件:添加 python 库

    我正在尝试编写一个 Sublime Text 插件 它可以进行一些 Windows api 调用 我做了一些研究发现这个Python库提供了我需要使用的API 所以 我正在尝试使用这个库 当我在我的 sublime text 插件中添加导入
  • 未捕获的类型错误:无法读取 null 的属性“lastChild”

    h2 Matching Game h2 p Click on the EXTRA face on the left side p
  • 在没有 /bin/bash 命令的情况下运行 docker 容器

    我创建了 docker 容器 sudo docker run it ubuntu bin bash 在我读过的 码头工人书 一书中 只要我们指定的命令 bin bash 正在运行 容器就会运行 我不是用选项 it 创建了终端并且不需要 bi
  • 如何在 angularjs 单元测试中触发 mousemove 事件

    我已经实现了一个使用鼠标事件的 angularjs 指令 单击组件并上下移动鼠标可以更改值 所以我需要知道如何在单元测试中触发 mousemove 事件 我使用 karma jasmine 我想建议在单元测试中当鼠标向上或向下移动时测试此组
  • 如何圆化 Matplotlib 轴脊柱的连接

    这是一个相当简单的问题 我正在创建一个具有多个插入轴的 Matplotlib 图形 我已删除刻度线 以便每个插入轴的插入脊椎以 90 度角相交 但是 当您向该图窗添加图例时 它会添加一个图例对象 该图例对象的每个 边缘 都有稍微圆形的脊柱连
  • Java 中的特定方法有多少字节的字节码?

    我最近读到乔恩 正光的博客巨大的方法 8000 字节的字节码 不是使用 HotSpot 进行 JIT 编译的 所以我的问题是 作为程序员 如何找出特定方法有多少字节的字节码 JIT 编译器似乎当然知道 我可以从 class file 您可以
  • Git忽略目录和目录/*有什么区别?

    我对忽略 git 中目录内容的正确方法感到困惑 假设我有以下目录结构 my project www 1 txt 2 txt gitignore 放置这个有什么区别 www 和这个 www 我问这个问题的原因是 在 git 中 如果目录为空
  • 使用 RegEx 查找 VBA 注释

    我正在尝试使用正则表达式查找所有 VBA 注释 我有一些大部分有效的东西 但有一些例外我无法弄清楚 我正在使用的表达 拿我们的测试代码来说 Working This is a test This should be captured Wor