使用Visual Studio的正则表达式搜索来查找空的Try/Catch块

4
我找到了一个与此问题相关的C#版本,但我无法转换为VB.net语法进行搜索,而且正则表达式本来就不是我的强项,所以我将发布我已有的内容,然后请求Stack的帮助。
我已经成功地编写了正则表达式:
Catch+\s+\b(_\w+|[\w-[0-9_]]\w*)\b+\s+As+\s+Exception+[\S|\r?\n]

这段文本与未指定异常的Catches匹配(还有一个换行符,因为这是我正在努力实现的一部分)。我想扩展它以查找空的Try/Catches,但显然我缺少了什么。

我在之前的正则表达式中添加了*+(Catch|End|Finally),变成了:

Catch+\s+\b(_\w+|[\w-[0-9_]]\w*)\b+\s+As+\s+Exception+[\S|\r?\n]*+(Catch|End|Finally)

据我所知,应该匹配任何空格/换行符,并且是有效的Catch关键字结束,但是我在那一点停止获得结果。在这里我错了什么?

也许值得捕捉注释! - Gusdor
学习正则表达式的方法:可以选择“regex the hardway”、“the standardway”或者阅读你喜欢编程语言的手册,大多数时候都会包含一个覆盖正则表达式的章节。一些有用的工具:auto-explaineronline tester,或者访问regex chatroom获取其他1337种工具和技巧 :) - HamZa
@HamZa 微软的查找和替换工具有一个真正混蛋版本的正则表达式。虽然有部分支持,但是与原版有所不同。 - Gusdor
2
@HamZa 基础知识相对容易,因为当出现问题时,它会崩溃并提供一个错误消息,你可以从中解决问题并学习。但是,使用 Visual Studio 的几乎未记录的查找和替换自定义正则表达式时,它只会默默失败,并迫使你求助于 StackOverflow。 - Frosty840
2
@Frosty840的“自定义正则表达式恐怖秀”。这个万圣节即将在您附近的剧院上演。发抖 - Gusdor
显示剩余2条评论
1个回答

5

试试这个:

(Catch(\s?.+As.+)?(\r?\n|\s)*)+(Finally)?(\r?\n|\s)*End Try

花了我很长时间才解决。有时候,Visual Studio真的很麻烦:D秘密是正确匹配换行符。我经常重复使用(\r?\n|\s)*。这将匹配\r\n\n\s零次或多次。 你搞砸了什么? 通常,在正则表达式和编程中,简单性是关键。您试图匹配完整的VB.net异常处理语法,并在某个地方犯了小错误。有时,匹配每个字符(.*)会起作用,如果您真的不关心内容(您想跳过区域,就像这里我们不关心实际的异常类型是否存在!)。我相当确定Visual Studio默认使用懒惰迭代。

嗯,它正在匹配catch块,但不幸的是它没有排除包含代码的块。搜索结果也非常奇怪,但我认为这更多是与Visual Studio有关而不是其他任何东西... - Frosty840
@Frosty840,只有当代码存在时才匹配End Try行吗?我已经修复了这个问题。 - Gusdor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接