4

我找到了这个问题的相关 C# 版本,但我未能将其转换为搜索 VB.net 的语法,而且正则表达式首先不是我的强项,所以我会发布我所拥有的得到,然后将自己置于堆栈的摆布之下。

我已经设法将正则表达式放在一起:

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)

据我所知,它应该与任何数量的空白/换行符匹配,然后是一个有效的 end-of-Catch 关键字,但此时我停止获得结果。

我在这里搞砸什么?

4

1 回答 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 使用惰性迭代作为标准。

于 2013-10-01T14:35:04.780 回答